Назад к вопросам
СБЕР
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()— ожидание с освобождением блокировок и возможностью быть разбуженным другим потоком.