2013-07-08 4 views
3

Я понимаю, что синхронизированные методы экземпляра Java могут выполняться параллельно, а статические - сериализуют методы; я не понимаю, поскольку статический метод блокирует объект класса, что происходит с другими объектами класса; мы запираемся между всеми статическими классами?Статические синхронизированные методы

спасибо.

+0

Это хороший вопрос, но и то, что вы можете проверить, чтобы узнать довольно легко. –

+0

Аналогичный вопрос, который мог бы дать ответ: http://stackoverflow.com/questions/437620/java-synchronized-static-methods-lock-on-object-or-class/437627#437627 –

ответ

2

Вместо того, чтобы блокировать экземпляр/объект, вы берете его на себя классом.

Когда вы блокируете класс, вы блокируете только , что класс, а не все классы.

От the docs

Синхронизированный метод получает монитор (§17.1) перед выполнением.

Для класса (статического) метода используется монитор, связанный с . Объект класса для класса метода используется.

Для метода экземпляра используется связанный с ним монитор (объект, для которого был вызван метод).

+0

Но кажется, что каждый массив также принадлежит классу, который отражается как объект класса, который разделяется всеми массивами с тем же типом элемента и количеством измерений; поэтому, если мы имеем дело с каким-то полиморфным поведением, всегда ли мы получаем разные классы? означает, что класс никогда не делится? – Basixp

+0

@Basixp Ваш вопрос запутан. Массивы не имеют статических методов, а статические методы не являются полиморфными. Что ты пытаешься сделать? –

+0

Значение внутри полиморфной иерархии объектов, скажем, у нас есть Base, а затем Derived1, Derived2 и т. Д., Где производные объекты вводят статические синхронизированные методы; каждый использует тот же класс? – Basixp

1

Классы Java имеют монитор, связанный с экземпляром класса. Поскольку для каждого класса имеется только один экземпляр класса, блокировка будет получена только на этом экземпляре класса.

Теперь каждый класс имеет свой экземпляр и, следовательно, собственный монитор, поэтому, чтобы ответить на ваш вопрос: Синхронизация статического метода будет блокировать доступ только к этому классу.

Смежные вопросы