Middle
Mik a különbségek a Thread.sleep() és a Thread.yield() módszerek között?
sobes.tech MI
Válasz az MI-től
A Thread.sleep() megszakítja a jelenlegi szál végrehajtását egy meghatározott ideig, és Timed Waiting állapotba helyezi. Nem ad CPU-t más szálaknak. A Thread.yield() tájékoztatja a szálütemezőt, hogy a jelenlegi szál ideiglenesen átadná a végrehajtást más, ugyanazzal vagy magasabb prioritású szálaknak, de nincs garancia arra, hogy ezt megteszi. A yield() a szálat Runnable állapotba helyezi.
Fő különbségek:
- Időtartam: a
sleep()garantálja a szünetet a megadott időtartamra. Ayield()nem garantálja az irányítás átadását vagy egy konkrét szünet időtartamát. - Szál állapota: a
sleep()a szálatTimed Waiting(vagyWaitingtimeout-tal) állapotba helyezi. Ayield()a szálatRunnableállapotba helyezi. - Cél: a
sleep()késleltetések bevezetésére szolgál. ayield()más szálak végrehajtásának lehetőségét biztosítja, különösen ciklusokban, hogy elkerüljük a CPU monopóliumát. - Ütemező: a
sleep()nem befolyásolja az ütemezőt (kivéve, hogy a szál inaktív). Ayield()egy javaslat az ütemező számára.
Használati példa:
// sleep() használata
try {
Thread.sleep(100); // 100 milliszekundumos szünet
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
// yield() használata
Thread.yield(); // Megkísérli átadni a végrehajtást