Как статическая работа в многопоточной среде? - PullRequest
0 голосов
/ 16 января 2011

Если у меня есть статический класс, как jvm гарантирует, что он был инициализирован один раз?Что происходит, когда два потока одновременно пытаются получить доступ к этому в первый раз?Является ли этот язык функций инвариантным? РЕДАКТИРОВАТЬ : речь идет о классе, который имеет статические переменные.

Ответы [ 4 ]

2 голосов
/ 16 января 2011

JVM гарантирует, что ЛЮБОЙ класс инициализируется ровно один раз.

Какой именно низкоуровневый механизм используется для этого, действительно зависит от JVM, но вы, как программист, должны знать, что он поточно-ориентирован как таковой, пытаясь получить доступ / инициализировать тот же класс из потоки. (Разумеется, это относится только к загрузке классов: с точки зрения доступа к любым неизменным данным, будь то статическим или конкретным, вам необходимо принять соответствующие меры.)

1 голос
/ 16 января 2011

Вы можете иметь статический вложенный класс и вести себя как любой другой класс.

Я предполагаю, что вы имеете в виду статический код / ​​блоки и инициализацию класса. JVM гарантирует, что класс будет загружен только одним потоком. Поскольку он встроен в JVM, я не думаю, что ни один язык не будет его использовать.

0 голосов
/ 16 января 2011

Статическое что-либо инициализируется, когда класс загружается, а не когда первый поток пытается получить к нему доступ.Однако static для класса отличается от static для элемента данных или функции / метода.См. эту статью для получения дополнительной информации об этом.Если вы спрашиваете об элементах данных, если они статические, то они считаются «переменными класса» или «методами класса», а не «объектными переменными» (см. эту статью Oracle для обсуждения ).Это достигается тем, что они становятся частью объекта класса, а не экземпляров.Существует только один объект класса для любого данного класса.

Что касается вашего вопроса о других языках: нет, static может означать много разных вещей в зависимости от языка.

0 голосов
/ 16 января 2011

Во-первых, ключевое слово static не так часто используется в объявлениях классов, хотя оно может использоваться там, но означает нечто иное, чем для переменных или методов.

Вы действительно хотели знатьстатические классы?Или это был вопрос о статических переменных / методах?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...