Логотип YeaHub

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

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

Тренажёр

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

Обучение

Навыки

Задачи

Войти

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

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

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

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

Какие методы Object связаны с многопоточностью?

Этот вопрос проверяет понимание базовых механизмов синхронизации и взаимодействия потоков, встроенных прямо в Object.

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

В Object есть несколько методов, напрямую связанных с многопоточностью: wait(), notify(), notifyAll() и clone() (косвенно).
Методы wait() и notify/notifyAll() используются для координации потоков через монитор объекта.
Каждый объект в Java может выступать в роли монитора.
Эти методы работают только в контексте синхронизации.
Без понимания этих методов невозможно корректно реализовать низкоуровневое взаимодействие потоков.

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

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

Основные методы Object, связанные с многопоточностью

1. wait(), wait(long), wait(long, int)

Определение:
wait() — это метод, который переводит текущий поток в состояние ожидания до тех пор, пока другой поток не уведомит монитор.

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

  1. Поток освобождает монитор объекта.

  2. Поток переходит в состояние WAITING или TIMED_WAITING.

  3. Возврат из wait() возможен только после:

    • вызова notify() / notifyAll()

    • истечения тайм-аута

    • прерывания потока

Пример:

synchronized (lock) {
    while (!condition) {
        lock.wait();
    }
    // работа с condition
}

2. notify()

notify() пробуждает один случайный поток, ожидающий монитор данного объекта.

Ключевые моменты:

  1. Поток не продолжает выполнение сразу.

  2. Он лишь переходит в состояние ожидания захвата монитора.

  3. Выбор потока не гарантирован.

synchronized (lock) {
    condition = true;
    lock.notify();
}

3. notifyAll()

notifyAll() пробуждает все потоки, ожидающие монитор объекта.

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

  1. Несколько потоков ждут разных условий.

  2. Нельзя точно определить, какой поток должен продолжить работу.

synchronized (lock) {
    condition = true;
    lock.notifyAll();
}

Дополнительно

  • clone() не управляет потоками, но связан с моделью памяти и синхронизацией при копировании объектов, поэтому иногда упоминается в контексте многопоточности.

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

Методы wait(), notify() и notifyAll() — это фундамент низкоуровневой синхронизации в Java, построенный вокруг монитора объекта и используемый для координации потоков.

Уровень

  • Рейтинг:

    5

  • Сложность:

    6

Навыки

  • Java

    Java

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

#object

#monitor

#wait

#notify

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