Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: synchronization, monitor

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

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

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

Синхронизация на объекте блокирует доступ только к конкретному экземпляру. Синхронизация на классе блокирует доступ ко всем экземплярам этого класса. В первом случае разные объекты могут выполняться параллельно. Во втором — все потоки конкурируют за один общий lock. Выбор влияет на уровень параллелизма и производительность.

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

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

Синхронизация на объекте

Синхронизация на объекте означает блокировку конкретного экземпляра.

Пример:

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

Особенности:

  • каждый объект имеет собственный monitor

  • разные экземпляры не блокируют друг друга

  • более высокий уровень параллелизма

Используется, когда:

  • данные принадлежат конкретному объекту

  • нет необходимости глобальной блокировки

Синхронизация на классе

Синхронизация на классе блокирует один monitor на весь класс.

Пример:

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

Эквивалент:

public static synchronized void method() { }

Особенности:

  • блокируются все экземпляры класса

  • используется один общий lock

  • ниже параллелизм, выше безопасность

Ключевые различия

Важно понимать:

  • объектный lock → уровень экземпляра

  • классовый lock → уровень всего класса

  • static synchronized всегда работает через lock класса

Практический вывод

Неправильный выбор:

  • снижает производительность

  • может привести к contention

  • усложняет масштабирование

Вывод: синхронизация на объекте — локальная, на классе — глобальная, и выбор должен соответствовать области защищаемых данных.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • Java

    Java

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

#synchronization

#monitor

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