Sobes.tech
Junior — Middle
86

Was sind die Unterschiede zwischen sleep, wait und yield im Kontext der Multithreading?

Unternehmen wurden gefragt
СБЕРСБЕР

Antwort von AI

sobes.tech KI

В контексте многопоточности в Java функции sleep, wait и yield имеют разные назначения:

  • sleep(long millis):

    • Приостанавливает выполнение текущего потока на заданное время.
    • Поток не освобождает монитор (блокировку), если она есть.
    • Используется для задержек.
  • wait():

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

    • Предлагает планировщику потоков уступить время другим потокам с таким же приоритетом.
    • Поток не блокируется и не переходит в состояние ожидания, а просто временно приостанавливается.
    • Используется для улучшения планирования, но не гарантирует переключение.

Пример:

Thread.sleep(1000); // пауза на 1 секунду
synchronized(obj) {
    obj.wait(); // ждем уведомления
}
Thread.yield(); // предлагаем планировщику переключиться