2014-09-28 8 views
1

Мои вопросы касаются Java. Может ли несколько потоков одновременно обращаться к статическому методу статического класса или может только один поток за время выполнения метода?Нитки и статические методы

Если я использую синхронизацию в заголовке метода, только один поток может выполнить его за раз?

ответ

3

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

Да, они могут. Если метод не равен synchronized, ограничений на количество потоков, которые могут получить доступ к этому методу, не существует.

Если я использую синхронизацию в заголовке метода, только один поток может выполнить его за раз?

Точно. Ключевое слово «method» («header») synchronized по статическим методам накладывает блокировку на сам класс, предотвращая ввод других потоков.

public static synchronized void foo() { 
    ... 
} 

(почти) эквивалентно

public static void foo() { 
    synchronized(MyClass.class) { 
     ... 
    } 
}