Middle
48
questionbank

В чём отличия между методами Thread.sleep() и Thread.yield()?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

Thread.sleep() приостанавливает выполнение текущего потока на определенное время, переводя его в состояние Timed Waiting. Он не отдает CPU другим потокам. Thread.yield() сообщает планировщику потоков, что текущий поток готов временно уступить выполнение другим потокам с тем же или более высоким приоритетом, но нет гарантии, что он это сделает. yield() переводит поток в состояние Runnable.

Основные отличия:

  • Продолжительность: sleep() гарантирует приостановку на заданное время. yield() не гарантирует передачу управления или конкретную длительность паузы.
  • Состояние потока: sleep() переводит поток в состояние Timed Waiting (или Waiting с таймаутом). yield() переводит поток в состояние Runnable.
  • Назначение: sleep() используется для введения задержки. yield() используется для предоставления возможности выполнения другим потокам, особенно в циклах, чтобы избежать монополии CPU.
  • Планировщик: sleep() не влияет на планировщик (кроме того, что поток неактивен). yield() является подсказкой для планировщика.

Пример использования:

java
java