Doporučená, 2022

Redakce Choice

Rozdíl mezi režimem sleep () a wait () Metoda v jazyce Java

Metoda spát a čekat zní jako dělat stejný úkol, ale oni jsou hodně odlišní od sebe navzájem. Metoda spánku patří do třídy Thread a metoda wait patří do třídy Object. Nejdůležitějším rozdílem, který odlišuje oba z nich, je, že metoda spánku drží zámek na objektu, dokud není přerušen nebo nedokončí jeho provedení. Na druhou stranu metoda wait uvolní uzamčení objektu, aby nechal ostatní objekty spustit až bude obnoven metodou upozornění. Mezi metodou spánku a čekání jsou některé další rozdíly; můžete je prozkoumat ve srovnávací tabulce uvedené níže.

Srovnávací graf

Základ pro porovnáníspátPočkejte
ZákladníRežim spánku neuvolní zámek na objektu, dokud není přerušen.Wait metoda uvolní zámek na objektu, aby ostatní objekty mohly být provedeny, dokud nebude vyvolána metoda NotifyAll nebo NotifyAll.
TřídaMetoda spánku je definována ve třídě vláken.Metoda Wait je definována ve třídě Object.
SynchronizovánoMetoda spánku nemusí být volána v rámci synchronizovaného kontextu.Metoda čekání musí být volána v rámci synchronizovaného kontextu.
DokončeníSpuštění metody spánku je dokončeno, když jej vlákno přeruší nebo vyprší doba spánku.Počkejte, jak je metoda dokončena, když ji metoda notification () nebo notificationAll () přeruší.
StatickýMetoda spánku je statická metoda.Čekejte, že metoda není statická, proto ji musí objekt vyvolat.
ProvedeníMetoda spánku se provádí na aktuálním vlákně.Metoda wait je provedena na objektu.
VýjimkaInterruptedExceptionIllegalArgumentException, IllegalMonitorStateException, InterruptedException.

Definice metody spánku

Metoda spánku je statická metoda třídy podprocesů . Metoda spánku je vyvolána, když vlákno nechce provádět určitý úkol po určitou dobu. Metoda spánku dokončí své provádění buď při vypršení času metody, nebo je přerušena nějakým jiným vláknem v provádění. Po dokončení režimu spánku podproces opět získá stav runnable. Existují dva způsoby spánku, jak je uvedeno níže.

 public static native void sleep (dlouhá milisekunda); public static void sleep (dlouhé milisekundy a int nanosekundy); 

Ve dvou výše uvedených formách můžete pozorovat čas, který je uveden ve formě spánkové metody. Je to proto, že vlákno vždy spí po určitou dobu uvedenou v parametru. Metoda spánku může být během provádění přerušena jakýmkoliv jiným vláknem; proto může hodit InterruptedExecption. Musíte se postarat o to, aby se výjimka řešila buď blokem try / catch, nebo jiným způsobem. Metoda spánku drží zámek na aktuálním objektu v provádění a neumožňuje provedení žádného jiného objektu, dokud nedokončí jeho provádění.

Definice metody čekání

Wait je metoda definovaná ve třídě Object . Metoda wait se používá, když několik úkolů (podprocesů) se potýká po jednom zdroji. Metoda wait při vyvolání uvolní zámek na objektu, který vyvolal metodu wait. A poskytnout šanci jinému objektu, aby byl proveden, dokud není vyvolána oznamovací metoda, která dále obnoví zámek na objektu uvolněném metodou wait. Metoda wait má následující formulář.

 Počkejte(); čekat (dlouhá milisekunda); čekat (dlouhá milisekunda, int nanosekunda); 

Stejně jako ve výše uvedených třech formách metody čekání, první metoda nemá žádný časový parametr, což znamená, že provedení metody čekání bude pokračovat až po oznámení nebo metodě NotifyAll nebude vyvoláno. Zbývající dvě metody mají časové parametry. Tak se budou provádět až do vypršení času nebo do oznámení nebo noitfyAll metoda je vyvolána dříve, než vyprší čas. Metoda wait může vyvolat výjimky. IllegalArgumentException, pokud je předaný argument času negativní. IllegalMonitorStateException, pokud aktuální podproces nepoužívá prostředek. InterruptedException, pokud je metoda čekání přerušena.

Klíčové rozdíly mezi spánkem a čekací metodou v jazyce Java

  1. Hlavním bodem, který odlišuje metodu spánku a čekání, je to, že metoda spánku drží zámek na objektu, dokud není přerušena nebo dokud neuplyne čas. Metoda wait však uvolní zámek na objektu, který jej vyvolá, a dává ostatním objektům šanci na provedení.
  2. Metoda spánku je definována ve třídě Thread, zatímco metoda wait je definována ve třídě Object .
  3. Metoda spánku nemusí být volána ze synchronizovaného kontextu. Metoda wait však musí být volána ze synchronizace.
  4. Metoda spánku je probuzena, pokud doba metody vyprší nebo je přerušena jiným vláknem. Metoda čekání je probuzena
    když je vyvolána metoda notifikace nebo oznámení All.
  5. Metoda spánku je statická metoda, zatímco metoda wait není statická metoda.
  6. Metoda spánku je prováděna na aktuálním vlákně, zatímco metoda čekání je prováděna na objektu, který ji vyvolá.
  7. Výjimka vyvolaná metodou spánku je InterruptedException, zatímco výjimky thrwon metodou wait jsou IllegalArgumentException, IllegalMonitorStateException, InterruptedException .

Závěr:

Pokud chce více vláken použít stejný zdroj jeden po druhém, pak musí být použita metoda wait. Pokud vlákno nechce provádět žádný úkol, musí být použita metoda spánku.

Top