С помощью статического метода вы будете делать в Java следующее:
class Foo {
public static synchronized void mymethod() {
...
}
}
В этом случае вы фактически синхронизируете на Foo.class
.
Если у вас есть метод экземпляра (т.е. не статический), и вам нужно синхронизировать, вы можете поместить в метод блок synchronized
и синхронизировать любой объект, даже в самом классе:
public void mymethod() {
synchronized( Foo.class ) {
...
}
}
Обратите внимание, что это синхронизирует доступ к другим статическим синхронизированным методам в том же классе du с объектом общей блокировки Foo.class
.
Кстати, ответ на этот вопрос зависит от определения доступ к : несколько потоков могут получить доступ к методу, пытаясь вызвать его, прочитать его метаданные отражения или даже ввести его в случай вложенных синхронизированных блоков, но обычно они не выполняют одновременно, если только части метода не синхронизированы (или не синхронизированы с другим объектом блокировки).