Назад к вопросам
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() пробуждает все ожидающие потоки.