Будут ли два synchronized статических метода в классе-синглтоне выполняться одновременно?

«Будут ли два synchronized статических метода в классе-синглтоне выполняться одновременно?» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Нет, не будут.

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

Пример:

public class SingletonController {
    public static synchronized void method1() {
        // Выполняется с блокировкой класса SingletonController.class
    }
    public static synchronized void method2() {
        // Будет ждать, пока method1() не освободит блокировку
    }
}

Почему это важно: Даже если экземпляр класса один (синглтон), статические методы синхронизируются на уровне класса. Это предотвращает одновременный вызов любых synchronized static методов из разных потоков, обеспечивая потокобезопасность для операций на уровне класса.