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 stavuTimed Waiting(aleboWaitings timeoutom).yield()presúva vlákno do stavuRunnable. - Úč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