Может ли несколько потоков одновременно обращаться к статическому методу статического класса или может только один поток одновременно выполнять этот метод?
Да, они могут. Если метод не равен synchronized
, ограничений на количество потоков, которые могут получить доступ к этому методу, не существует.
Если я использую синхронизацию в заголовке метода, только один поток может выполнить его за раз?
Точно. Ключевое слово «method» («header») synchronized
по статическим методам накладывает блокировку на сам класс, предотвращая ввод других потоков.
public static synchronized void foo() {
...
}
(почти) эквивалентно
public static void foo() {
synchronized(MyClass.class) {
...
}
}