Метод 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 и его продолжению выполнения.
Если вам понравилось, буду признателен за подписку.