Sobes.tech
Middle

Koje su razlike između metoda Thread.sleep() i Thread.yield()?

sobes.tech АИ

Одговор од АИ

Thread.sleep() zaustavlja izvršavanje trenutne niti na određeno vrijeme, prebacujući je u stanje Timed Waiting. Ne prepušta CPU drugim nitima. Thread.yield() obavještava planera niti da je trenutna nit spremna privremeno prepustiti izvršavanje drugim nitima s istim ili višim prioritetom, ali nema garancije da će to učiniti. yield() prebacuje nit u stanje Runnable.

Glavne razlike:

  • Trajanje: sleep() garantira zaustavljanje na zadano vrijeme. yield() ne garantira prijenos kontrole ili određeno trajanje pauze.
  • Stanje niti: sleep() prebacuje nit u stanje Timed Waiting (ili Waiting s timeoutom). yield() prebacuje nit u stanje Runnable.
  • Svrha: sleep() se koristi za uvod u odgode. yield() se koristi za omogućavanje izvršavanja drugih niti, posebno u petljama, kako bi se izbjegla monopolizacija CPU-a.
  • Planer: sleep() ne utječe na planera (osim što nit nije aktivna). yield() je sugestija za planera.

Primjer korištenja:

// Korištenje sleep()
try {
    Thread.sleep(100); // Pauza od 100 milisekundi
} catch (InterruptedException e) {
    Thread.currentThread().interrupt();
}
// Korištenje yield()
Thread.yield(); // Pokušaj da se preda izvršavanje