Назад к вопросам
Middle
67
questionbank
Что делает метод wait в Java?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
Вызывает текущий поток в состояние ожидания (отпустив блокировку объекта), пока другой поток не вызовет метод notify() или notifyAll() для того же объекта, либо не произойдет таймаут. Используется в синхронизированных блоках или методах.
// Пример использования wait() и notify()
public class SharedObject {
private boolean dataAvailable = false;
public synchronized void waitForData() throws InterruptedException {
while (!dataAvailable) {
// Поток ждет, пока данные не станут доступны
wait();
}
// Обработка данных
System.out.println("Data received.");
}
public synchronized void sendData() {
// Отправка данных
dataAvailable = true;
// Уведомляем ожидающие потоки
notifyAll();
System.out.println("Data sent.");
}
}
Ключевые моменты:
- Вызывается только из синхронизированного контекста (блока или метода).
- Поток освобождает блокировку объекта, для которого вызван
wait(). - Может быть прерван (
InterruptedException). - Имеет перегруженные версии с таймаутом.
notify()пробуждает один из ожидающих потоков.notifyAll()пробуждает все ожидающие потоки.