Sobes.tech
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 de Timed Waiting (ou Waiting avec timeout). yield() met le thread en état de Runnable.
  • 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