Назад к вопросам
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(); // Попытка уступить выполнение