Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

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

Где можно вызывать wait() и notify()?

Вопрос проверяет знание правил использования механизмов ожидания и уведомления в Java.

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

wait() и notify() можно вызывать только внутри синхронизированного блока или метода. Поток должен владеть монитором объекта, на котором вызывается метод. В противном случае будет выброшено исключение. Это правило гарантирует корректную работу синхронизации.

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

Правильное использование wait() и notify() жестко связано с понятием монитора.

Требование владения монитором

Определение:
Поток должен владеть монитором объекта, чтобы вызывать wait() или notify() для этого объекта.

Это означает:

  • код должен быть внутри synchronized

  • синхронизация должна выполняться на том же объекте

synchronized (lock) {
    lock.wait();
}

Нарушение правила:

lock.wait(); // IllegalMonitorStateException

Почему это важно

Перед объяснением причины важно понимать, что монитор управляет доступом к объекту.

  • предотвращаются гонки данных

  • гарантируется согласованность состояния

  • поток корректно освобождает монитор при ожидании

Частые ошибки

  • вызов wait() не на том объекте

  • синхронизация на одном объекте, а ожидание на другом

  • вызов notify() вне synchronized

Краткий вывод

wait() и notify() всегда должны вызываться внутри синхронизированного блока на том же объекте, чей монитор используется.

Уровень

  • Рейтинг:

    4

  • Сложность:

    5

Навыки

  • Java

    Java

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

#object

#monitor

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