Sobes.tech
Middle

Kuo skiriasi metodai Thread.sleep() ir Thread.yield()?

sobes.tech AI

Atsakymas iš AI

Thread.sleep() sustabdo dabartinį siūlą tam tikram laikui ir perkelia jį į Timed Waiting būseną. Jis neperduoda CPU kitiems siūlams. Thread.yield() informuoja siūlų planuotoją, kad dabartinis siūlas yra pasiruošęs laikinai perduoti vykdymą kitiems siūlams su ta pačia arba aukštesne prioritetu, tačiau nėra garantijos, kad tai įvyks. yield() perkelia siūlą į Runnable būseną.

Pagrindiniai skirtumai:

  • Trukmė: sleep() garantuoja sustabdymą nustatytam laikui. yield() ne garantuoja kontrolės perdavimą ar konkrečią pauzės trukmę.
  • Siūlo būsena: sleep() perkelia siūlą į Timed Waiting (arba Waiting su laiko limitu). yield() perkelia siūlą į Runnable būseną.
  • Paskirtis: sleep() naudojamas vėlavimams įvesti. yield() naudojamas leidžiant vykdyti kitus siūlus, ypač cikluose, siekiant išvengti CPU monopolijos.
  • Planavimo algoritmas: sleep() nepaveikia planuotojo (išskyrus tai, kad siūlas yra neaktyvus). yield() yra patarimas planuotojui.

Pavyzdys:

// Naudojant sleep()
try {
    Thread.sleep(100); // Sustabdymas 100 milisekundžių
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
}
// Naudojant yield()
Thread.yield(); // Bandymas perduoti vykdymą