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 deTimed Waiting(sauWaitingcu timeout).yield()pune firul în starea deRunnable. - 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