Может ли синхронизированный статический метод вызвать блокировку на уровне класса? - PullRequest
1 голос
/ 28 августа 2011

Если у класса A есть открытый статический метод, который помечен ключевым словом 'synchronized', то есть ли возможность иметь блокировку на уровне класса?

Когда в таком классе есть блокировка, можем ли мыинстанцировать объект этого класса или он не имеет ничего общего с инстанцированием?

Ответы [ 3 ]

4 голосов
/ 28 августа 2011

Если класс A имеет открытый статический метод, который помечен «синхронизированное» ключевое слово, то есть ли возможность иметь класс блокировка уровня?

Да, в классе А будет блокировка на уровне класса.

Когда в таком классе есть блокировка, можем ли мы создать экземпляр объекта этого класса или он не имеет ничего общего с созданием экземпляра?

При блокировке статического метода он влияет только на другие синхронизированные статические методы. Вы все еще можете создать новый экземпляр этого класса.

3 голосов
/ 28 августа 2011

Да, блокировка будет сохранена для объекта Class.

Цитируется из Блокирует синхронизированные методы

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

2 голосов
/ 28 августа 2011

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

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