Найти тему
DEBAGanov

Java 1487. Что является монитором при работе с методом wait?

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

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

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

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

Вот пример использования метода wait():

public class WaitExample {
public static void main(String[] args) {
final Object lock = new Object();

Thread thread1 = new Thread(() -> {
synchronized (lock) {
try {
System.out.println("Поток 1 ожидает");
lock.wait();
System.out.println("Поток 1 проснулся");
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});

Thread thread2 = new Thread(() -> {
synchronized (lock) {
System.out.println("Поток 2 выполняет уведомление");
lock.notify();
}
});

thread1.start();
thread2.start();
}
}

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

3019 вопрос-ответ по Java

Курс Spring Framework

Tелеграмм каналDEBAGanov

Мое резюмеDEBAGanov

Если вам понравилось, буду признателен за подписку.