Middle
Millised on Thread.sleep() ja Thread.yield() meetodite erinevused?
sobes.tech AI
Vastus AI-lt
Thread.sleep() peatab jooksva niidi teostamise kindlaks ajaks ja viib selle Timed Waiting olekusse. See ei anna CPU-d teistele niitidele. Thread.yield() teavitab niidihaldurit, et jooksval niidil on valmis ajutiselt loobuma täitmisest teiste sama või kõrgema prioriteediga niitide kasuks, kuid selle toimumist ei ole garanteeritud. yield() viib niidi Runnable olekusse.
Peamised erinevused:
- Kestus:
sleep()garanteerib peatuse määratud ajaks.yield()ei garanteeri kontrolli üleandmist ega konkreetset pausi kestust. - Niidi olek:
sleep()viib niidiTimed Waiting(võiWaitingkoos timeoutiga).yield()viib niidiRunnableolekusse. - Eesmärk:
sleep()kasutatakse viivituste sisseviimiseks.yield()võimaldab teistel niitidel täita, eriti tsüklites, et vältida CPU monopoliseerimist. - Planeerija:
sleep()ei mõjuta planeerijat (välja arvatud see, et niit on mitteaktiivne).yield()on planeerijale soovitus.
Näide kasutamisest:
// sleep() kasutamine
try {
Thread.sleep(100); // Peatamine 100 millisekundiks
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
// yield() kasutamine
Thread.yield(); // Püüe täitmise üleandmiseks