Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: synchronized, static

Как работает synchronized для статических методов?

Вопрос проверяет понимание различий между синхронизацией на уровне объекта и на уровне класса.

Короткий ответ

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

Длинный ответ

Определение

static synchronized метод синхронизируется на мониторе объекта Class, соответствующего данному классу.

class Counter {
    static synchronized void increment() {
        // критическая секция
    }
}

Эквивалентно:

synchronized (Counter.class) {
    // критическая секция
}

Что это означает на практике

  • синхронизация общая для всего класса

  • не зависит от количества экземпляров

  • блокирует все static synchronized методы класса

Сравнение с обычным synchronized

  • synchronized метод → монитор экземпляра

  • static synchronized метод → монитор класса

Это два разных монитора.

Важный момент

Статическая и нестатическая синхронизация:

  • не конфликтуют

  • не блокируют друг друга

Вывод

static synchronized защищает общее состояние класса. Он используется, когда данные разделяются между всеми экземплярами.

Уровень

  • Рейтинг:

    4

  • Сложность:

    6

Навыки

  • Java

    Java

Ключевые слова

#synchronized

#static

Подпишись на Java Developer в телеграм