Middle
Quelle est la différence entre les méthodes Thread.sleep() et Thread.yield() ?
sobes.tech IA
Réponse de l'IA
Thread.sleep() suspend l'exécution du thread actuel pendant une durée déterminée, le mettant en état de Timed Waiting. Il ne cède pas le CPU à d'autres threads. Thread.yield() informe le planificateur de threads que le thread actuel est prêt à céder temporairement l'exécution à d'autres threads avec la même ou une priorité plus élevée, mais il n'y a aucune garantie qu'il le fasse. yield() met le thread en état de Runnable.
Les principales différences :
- Durée :
sleep()garantit la suspension pour une durée spécifiée.yield()ne garantit pas le transfert de contrôle ni une durée précise de pause. - État du thread :
sleep()met le thread en état deTimed Waiting(ouWaitingavec timeout).yield()met le thread en état deRunnable. - But :
sleep()est utilisé pour introduire des retards.yield()est utilisé pour permettre l'exécution d'autres threads, notamment dans des boucles, afin d'éviter la monopolisation du CPU. - Planificateur :
sleep()n'affecte pas le planificateur (hormis que le thread n'est pas actif).yield()est une suggestion pour le planificateur.
Exemple d'utilisation :
// Utilisation de sleep()
try {
Thread.sleep(100); // Suspension de 100 millisecondes
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
// Utilisation de yield()
Thread.yield(); // Tentative de céder l'exécution