Priporočena, 2024

Izbira Urednika

Razlika med načinom spanja () in načinom čakanja () v Javi

Metoda spanja in čakanja zveni kot opravljanje enake naloge, vendar se med seboj precej razlikujejo. Sleep metoda pripada razredu Thread, metoda čakanja pa pripada razredu Object. Najpomembnejša razlika, ki ločuje oba, je, da metoda spanja drži ključavnico na objektu, dokler se ne prekine ali dokonča njeno izvedbo. Po drugi strani pa metoda čakanja sprosti zaklepanje na objekt, da pusti druge objekte, da se izvedejo, dokler se ne nadaljuje z metodo notify. Obstaja še nekaj razlik med metodo spanja in čakanja; lahko jih raziščete v spodnji tabeli za primerjavo.

Primerjalna tabela

Podlaga za primerjavospanjapočakaj
OsnovnoNačin mirovanja ne sprosti zaklepanja predmeta, dokler ga ne prekinete.Počakaj metoda sprosti zaklepanje na predmet, da pusti druge objekte, da se izvedejo, dokler se ne pokliče ali prijavi.
RazredNačin mirovanja je definiran v razredu Thread.Metoda čakanja je definirana v razredu Object.
SinhroniziranoNačin mirovanja ni treba priklicati znotraj sinhroniziranega konteksta.Metoda čakanja mora biti klicana znotraj sinhroniziranega konteksta.
ZaključekIzvajanje načina spanja se konča, ko ga nit prekine ali pa je potekel čas spanja.Izvedba čakanja na metodo se zaključi, ko jo prekine metoda notify () ali notifyAll ().
StatičnoNačin mirovanja je statična metoda.Metoda čakanja ni statična, zato potrebuje objekt, da jo pokliče.
IzvajanjeMetoda spanja se izvaja na trenutni niti.Na objektu se izvede metoda čakanja.
IzjemaInterruptedExceptionIllegalArgumentException, IllegalMonitorStateException, InterruptedException.

Definicija metode spanja

Metoda spanja je statična metoda razreda Thread . Metoda spanja se prikliče, ko nit ne želi izvajati nobene naloge za določeno časovno obdobje. Metoda spanja dokonča izvedbo, ko je čas metode iztekel, ali pa ga prekine kak drug tok v izvedbi. Ko je metoda spanja končana, nit ponovno pridobi status, ki ga je mogoče izvesti. Obstajata dva načina spanja, kot je prikazano spodaj.

 javno statično domače void spanje (dolga milisekunda); javno statično prazno spanje (dolge milisekunde in int nanosekunde); 

V zgornjih dveh oblikah lahko opazujemo čas, omenjen v obeh oblikah spanja. To je zato, ker nit vedno spi za določen čas, omenjen v parametru. Metoda spanja se lahko med izvajanjem prekine s katero koli drugo nitjo; zato lahko vrne InterruptedExecption. Poskrbeti morate, da bo izjema obravnavana s poskusnim / catch blokom ali s ključnimi besedami Throws, sicer bo prišlo do napake pri prevajanju. Metoda spanja zadrži zaklepanje na trenutnem objektu v izvršitvi in ​​ne dovoli nobenemu drugemu predmetu, da se izvrši, dokler ne konča svoje izvedbe.

Definicija metode čakanja

Wait je metoda, definirana v razredu Object . Metoda čakanja se uporablja, ko se več nalog (niti) bori za isti vir. Metoda čakanja, ko jo pokličete, sprosti zaklepanje objekta, ki je priklical metodo čakanja. In zagotovite priložnost, da se drugi objekt izvrši, dokler se ne pokliče metoda, ki še naprej sproži zaklepanje na predmetu, ki ga sprosti metoda čakanja. Metoda čakanja ima naslednji obrazec.

 wait (); počakaj (dolga milisekunda); počakaj (dolga milisekunda, int nanosekunda); 

Kot v zgornjih treh oblikah metode čakanja, prva metoda nima časovnega parametra, kar pomeni, da bo izvajanje metode čakanja trajalo, dokler se ne bo poklicala metoda notify ali notifyAll. Ostala dva načina imata časovne parametre. Torej se bodo izvajali do izteka časa ali dokler se ne prijavi ali notitfyAll metoda pokliče prej kot se izteče čas. Metoda čakanja lahko vrne izjeme. IllegalArgumentException, če je podani časovni argument negativen. IllegalMonitorStateException, če trenutna nit ne uporablja sredstva. InterruptedException, če je metoda čakanja prekinjena.

Ključne razlike med načinom mirovanja in načinom čakanja v Javi

  1. Glavna točka, ki razlikuje med spanjem in čakanjem, je ta, da metoda spanja drži ključavnico na objektu, dokler je ne prekine ali če čas poteče. Vendar pa metoda čakanja sprosti zaklepanje na objektu, ki ga pokliče, in daje drugim objektom možnost izvršitve.
  2. Metoda spanja je definirana v razredu Thread, medtem ko je metoda čakanja definirana v razredu Object .
  3. Metode spanja ni treba priklicati iz sinhroniziranega konteksta. Metoda čakanja pa mora biti klicana iz sinhronizirane.
  4. Metoda spanja se prebudi, če je čas metode potekel ali pa ga prekine druga nit. Metoda čakanja se prebudi
    ko je priklicana metoda notify ali notify All.
  5. Metoda spanja je statična metoda, medtem ko metoda čakanja ni statična metoda.
  6. Metoda spanja se izvaja na trenutni niti, medtem ko se metoda čakanja izvede na objektu, ki ga pokliče.
  7. Izjema, ki jo sproži metoda spanja, je InterruptedException, medtem ko sta izjeme thrwon by wait metoda IllegalArgumentException, IllegalMonitorStateException, InterruptedException .

Sklep:

Ko več niti želi uporabiti isti vir enega za drugim, je treba uporabiti metodo čakanja. Ko nit ne želi izvajati nobene naloge, je treba uporabiti metodo spanja.

Top