Sobes.tech
Middle

Care sunt diferențele dintre metodele Thread.sleep() și Thread.yield()?

sobes.tech AI

Răspuns de la AI

Thread.sleep() întrerupe execuția firului curent pentru o perioadă determinată, punându-l în starea de Timed Waiting. Nu cedează CPU altor fire. Thread.yield() informează planificatorul de fire că firul curent este gata să cedeze temporar execuția altor fire cu aceeași sau o prioritate mai mare, dar nu există nicio garanție că se va întâmpla acest lucru. yield() pune firul în starea de Runnable.

Principalele diferențe:

  • Durată: sleep() garantează suspendarea pentru o durată specificată. yield() nu garantează transferul de control sau o durată precisă a pauzei.
  • Starea firului: sleep() pune firul în starea de Timed Waiting (sau Waiting cu timeout). yield() pune firul în starea de Runnable.
  • Scop: sleep() este folosit pentru a introduce întârzieri. yield() este folosit pentru a permite altor fire să ruleze, mai ales în bucle, pentru a evita monopolizarea CPU.
  • Planificator: sleep() nu afectează planificatorul (cu excepția faptului că firul nu este activ). yield() este o sugestie pentru planificator.

Exemplu de utilizare:

// Utilizarea sleep()
try {
    Thread.sleep(100); // Pauză de 100 de milisecunde
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
}
// Utilizarea yield()
Thread.yield(); // Încercare de a ceda execuția