Назад к вопросам
Middle
73
questionbank

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

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

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

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

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

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

// Использование sleep()
try {
    Thread.sleep(100); // Приостановка на 100 миллисекунд
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
}
// Использование yield()
Thread.yield(); // Попытка уступить выполнение