Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Java: multithreading, synchronization, wait, notify

Как работают wait() и notify()? Где их можно вызывать?

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

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

wait() и notify() используются для координации потоков:

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

  • notify() пробуждает один случайный ожидающий поток
    Вызывать можно только в synchronized блоках, иначе IllegalMonitorStateException

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

Механизм работы:

  1. Поток захватывает монитор объекта через synchronized

  2. Вызов wait():

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

    • Переводит поток в состояние WAITING

  3. Другой поток вызывает notify()/notifyAll() для пробуждения

  4. Поток перезахватывает монитор при пробуждении

Пример:

Object lock = new Object();

// Поток 1
synchronized (lock) {
    lock.wait(); // Освобождает lock и ждет
}

// Поток 2
synchronized (lock) {
    lock.notify(); // Пробуждает Поток 1
}

Ограничения:

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

  • notify() пробуждает случайный поток

  • Альтернативы: Condition из java.util.concurrent

Уровень

  • Рейтинг:

    1

  • Сложность:

    6

Навыки

  • Java

    Java

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

#multithreading

#synchronization

#wait

#notify

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