Sobes.tech
Назад к вопросам
Junior — Middle
67

Что произойдет с потоком, если внутри метода, отмеченного synchronized, вызвать метод wait() на текущем объекте?

Ответ от нейросети

sobes.tech AI

Если внутри метода, помеченного ключевым словом synchronized, вызвать метод wait() на текущем объекте, то поток:

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

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

Пример:

synchronized(this) {
    while (!условие) {
        wait(); // освобождает монитор и ждёт уведомления
    }
    // код, выполняющийся после пробуждения
}