Recomandat, 2024

Alegerea Editorului

Diferența dintre somn () și așteptați () Metoda în Java

Metoda de somn și așteptare sună ca și cum ar face aceeași sarcină, dar acestea sunt mult diferite unul de celălalt. Modul Sleep aparține clasei Thread, iar metoda de așteptare aparține clasei Object. Cea mai importantă diferență care distinge amândouă este metoda de somn care ține blocarea pe obiect până când este întreruptă sau termină execuția. Pe de altă parte, metoda de așteptare eliberează blocarea pe obiect pentru a permite executarea celorlalte obiecte până când este reluată prin metoda de notificare. Există mai multe diferențe între modul de somn și așteptare; le puteți explora în tabelul de comparație prezentat mai jos.

Diagramă de comparație

Bazele comparațieidormiaștepta
De bazăModul Sleep nu eliberează blocarea unui obiect până când nu este întrerupt.Metoda așteptare eliberează blocarea pe obiect pentru a lăsa alte obiecte să execute până la notificare sau notificareAceastă metodă este invocată.
ClasăModul Sleep este definit în clasa Thread.Metoda așteptare este definită în clasa Obiect.
sincronizatModul Sleep nu trebuie apelat în contextul Sincronizat.Metoda așteptare trebuie apelată în contextul Sincronizat.
CompletareModul de execuție a somnului este finalizat atunci când un fir îl întrerupe sau metoda de timp de somn a expirat.Așteptați executarea metodei este finalizată când metoda notificare () sau notifyAll () o întrerupe.
StaticMetoda Sleep este o metodă statică.Metoda așteptare nu este statică, de aceea este nevoie de obiect pentru ao invoca.
ExecuţieMetoda de somn este executată pe firul curent.Metoda de așteptare este executată pe obiect.
ExcepțieInterruptedExceptionExcepțieAglementare ilegală, Excepție ilegală de stat, Excepție întreruptă.

Definiția Sleep Method

Metoda de somn este metoda statică a clasei Thread . Metoda de somn este invocată atunci când un fir nu dorește să efectueze nici o sarcină pentru o anumită perioadă de timp. Metoda de somn completează execuția fie atunci când timpul de expirare a metodei, fie este întrerupt de un alt thread în execuție. După terminarea metodei de somn, firele își câștigă din nou starea de alergare. Există două metode de somn după cum se arată mai jos.

 static static nativ void sleep (lung milisecunde); starea de void public static (lungi de milisecunde și int nanosecunde); 

În cele două formule de mai sus, puteți observa că timpul este menționat atât în ​​forma metodei somnului. Acest lucru se datorează faptului că un fir întotdeauna doarme pentru un anumit timp menționat în parametru. Metoda de somn poate fi întreruptă de orice alt fir în timpul executării; prin urmare, se poate arunca InterruptedExecption. Trebuie să aveți grijă ca excepția să fie tratată fie prin încercarea / blocarea capturării, fie prin aruncarea cuvintele cheie altfel, va duce la eroarea de compilare a timpului. Metoda de somn ține blocarea obiectului curent în execuție și nu permite ca nici un alt obiect să se execute până la terminarea executării acestuia.

Definiția Wait Method

Așteptați este metoda definită în clasa obiect . Metoda de așteptare este utilizată atunci când mai multe sarcini (fire) se luptă pentru aceeași resursă una câte una. Metoda de așteptare când este invocată eliberează blocarea pe obiectul care a invocat metoda de așteptare. Și oferiți o șansă unui alt obiect pentru a fi executat până când se invocă o metodă de notificare care reia în continuare blocarea pe obiectul eliberat prin metoda de așteptare. Metoda de așteptare are următoarea formă.

 aștepta(); așteptați (milisecunde lungi); așteptați (milisecunde lungi, int nanosecunde); 

Ca și în cele trei forme de așteptare de mai sus, prima metodă nu are parametru de timp, înseamnă că executarea metodei de așteptare va continua până când notificarea sau notificarea nu va fi invocată. Celelalte două metode au parametri de timp. Deci, ei vor executa până la expirarea timpului sau până la notificare sau notifyToate metoda este invocată mai devreme de expirarea timpului. Metoda de așteptare poate face excepții. IllegalArgumentException, dacă argumentul de timp trecut este negativ. IllegalMonitorStateException, dacă firul curent nu utilizează resursa. InterruptedException, dacă metoda de așteptare este întreruptă.

Diferențe cheie între metoda somn și așteptare în Java

  1. Principalul punct care distinge metoda de somn și așteptare este că metoda de somn ține blocarea obiectului până când acesta este întrerupt sau timpul său expiră. Cu toate acestea, metoda de așteptare eliberează blocarea pe obiectul care îl invocă și dă altor obiecte șansa de a executa.
  2. Metoda de somn este definită în clasa Thread, în timp ce metoda de așteptare este definită în clasa Object .
  3. Metoda de somn nu trebuie apelată din context sincronizat. Dar metoda de așteptare trebuie apelată din sincronizare.
  4. Metoda de somn este trezită dacă timpul de expirare a metodei sau este întrerupt de celălalt fir. Metoda de așteptare este trezită
    când se invocă metoda de notificare sau notificare .
  5. Metoda de somn este metoda statică, în timp ce metoda de așteptare nu este o metodă statică .
  6. Metoda de somn este executată pe firul curent, în timp ce metoda de așteptare este executată pe obiectul care o invocă.
  7. Excepția aruncată de metoda somnului este InterruptedException, în timp ce excepțiile prin metoda așteptare sunt IllegalArgumentException, IllegalMonitorStateException, InterruptedException .

Concluzie:

Atunci când mai multe fire sunt dorite să folosească aceeași resursă unul câte unul, atunci metoda de așteptare trebuie utilizată. Atunci când un fir nu dorește să efectueze nici o sarcină, atunci trebuie utilizată metoda somnului.

Top