Sobes.tech
Middle

Aké sú rozdiely medzi metódami Thread.sleep() a Thread.yield()?

sobes.tech AI

Odpoveď od AI

Thread.sleep() pozastaví vykonávanie aktuálneho vlákna na určitý čas, presunie ho do stavu Timed Waiting. Neodovzdáva CPU iným vláknam. Thread.yield() informuje plánovač vlákien, že aktuálne vlákno je pripravené dočasne vzdať vykonávanie iným vláknam s rovnakou alebo vyššou prioritou, ale nie je zaručené, že tak urobí. yield() presúva vlákno do stavu Runnable.

Hlavné rozdiely:

  • Dĺžka: sleep() garantuje pozastavenie na stanovený čas. yield() nezaručuje prevod kontroly alebo konkrétnu dĺžku pauzy.
  • Stav vlákna: sleep() presúva vlákno do stavu Timed Waiting (alebo Waiting s timeoutom). yield() presúva vlákno do stavu Runnable.
  • Účel: sleep() sa používa na zavedenie oneskorení. yield() sa používa na umožnenie vykonávania iných vlákien, najmä v slučkách, aby sa zabránilo monopolizácii CPU.
  • Plánovač: sleep() neovplyvňuje plánovač (okrem toho, že vlákno je neaktívne). yield() je návrh pre plánovača.

Príklad použitia:

// Použitie sleep()
try {
    Thread.sleep(100); // Pozastavenie na 100 milisekúnd
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
}
// Použitie yield()
Thread.yield(); // Pokus o odovzdanie vykonávania