Назад к вопросам
СБЕР
Junior — Middle
65
Чем отличаются функции sleep, wait и yield в контексте многопоточности?
Компании, где спрашивали
Ответ от нейросети
sobes.tech AI
В контексте многопоточности в Java функции sleep, wait и yield имеют разные назначения:
-
sleep(long millis):
- Приостанавливает выполнение текущего потока на заданное время.
- Поток не освобождает монитор (блокировку), если она есть.
- Используется для задержек.
-
wait():
- Вызывает текущий поток на объекте, освобождая монитор этого объекта и переводя поток в состояние ожидания.
- Поток будет ждать, пока другой поток не вызовет
notify()илиnotifyAll()на том же объекте. - Используется для межпоточного взаимодействия и синхронизации.
-
yield():
- Предлагает планировщику потоков уступить время другим потокам с таким же приоритетом.
- Поток не блокируется и не переходит в состояние ожидания, а просто временно приостанавливается.
- Используется для улучшения планирования, но не гарантирует переключение.
Пример:
Thread.sleep(1000); // пауза на 1 секунду
synchronized(obj) {
obj.wait(); // ждем уведомления
}
Thread.yield(); // предлагаем планировщику переключиться