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

Как отличаются функции wait() и sleep() в контексте управления потоками или процессами?

Компании, где спрашивали
СБЕРСБЕР

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

sobes.tech AI

Функции wait() и sleep() используются для управления потоками, но имеют разные назначения и поведение.

  • sleep() — приостанавливает выполнение текущего потока на заданное время. Поток просто «засыпает» и не использует процессорное время, но при этом не освобождает никаких ресурсов или блокировок.

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

Пример в Java:

synchronized(lock) {
    while (!condition) {
        lock.wait(); // поток ждёт и освобождает блокировку
    }
    // выполняется после уведомления
}

// sleep пример
Thread.sleep(1000); // поток просто приостанавливается на 1 секунду

Итого:

  • sleep() — пауза без освобождения блокировок.
  • wait() — ожидание с освобождением блокировок и возможностью быть разбуженным другим потоком.