Sobes.tech
Назад к вопросам
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(); // предлагаем планировщику переключиться