Aanbevolen, 2024

Editor'S Choice

Verschil tussen slaap- () en wacht () -methode in Java

De slaap- en wachtmethode klinkt als het doen van dezelfde taak, maar ze verschillen veel van elkaar. Slaapmethode hoort bij de Thread-klasse en de wachtmethode hoort bij de klasse Object. Het belangrijkste verschil dat ze beide onderscheidt, is dat de slaapmethode het slot op het object houdt totdat het wordt onderbroken of de uitvoering wordt beëindigd. Aan de andere kant maakt de wachtmethode het slot op het object vrij om de andere objecten te laten uitvoeren totdat het wordt hervat door de waarschuwingsmethode. Er zijn nog meer verschillen tussen de slaap- en wacht-methode; je kunt ze verkennen in de onderstaande vergelijkingsgrafiek.

Vergelijkingstabel

Basis voor vergelijkingslaapWacht
basis-Slaapmethode laat het slot van een voorwerp pas los als het wordt onderbroken.Wait-methode maakt het slot op het object vrij om andere objecten te laten uitvoeren tot notificatie of notificatie. Alle methoden worden aangeroepen.
KlasseSlaapmethode is gedefinieerd in de discussielijn.De methode Wait wordt in de klasse Object gedefinieerd.
gesynchroniseerdSlaapmethode hoeft niet te worden aangeroepen in de synchrone context.De wacht-methode moet worden aangeroepen binnen de gesynchroniseerde context.
VoltooiingDe uitvoering van de slaapmethode is voltooid wanneer een thread deze onderbreekt of de slaaptijdmethode is verlopen.De uitvoering van de Wait-methode is voltooid wanneer de methode notify () of notifyAll () deze onderbreekt.
StatischSlaapmethode is een statische methode.De methode Wait is niet statisch, daarom heeft het object nodig om het aan te roepen.
UitvoeringDe slaapmethode wordt uitgevoerd op de huidige thread.De wachtmethode wordt op het object uitgevoerd.
UitzonderingInterruptedExceptionIllegalArgumentException, IllegalMonitorStateException, InterruptedException.

Definitie van slaapmethode

De slaapmethode is de statische methode van de Thread- klasse. De slaapmethode wordt aangeroepen wanneer een thread een taak gedurende een bepaalde tijd niet wil uitvoeren. De slaapmethode voltooit zijn uitvoering, hetzij wanneer de tijd van de methode is verstreken, of het wordt onderbroken door een andere thread in de uitvoering. Nadat de slaapmethode is voltooid, krijgt de thread opnieuw de status 'Runnable'. Er zijn twee van de slaapmethode zoals hieronder getoond.

 openbare statische native void-slaap (lange milliseconde); openbare statische leegteslaap (lange milliseconden en int nanoseconde); 

In de bovenstaande twee vorm kun je zien dat tijd wordt genoemd in zowel de vorm van de slaapmethode. Dit komt omdat een thread altijd slaapt gedurende een bepaalde tijd die in de parameter wordt genoemd. De slaapmethode kan tijdens de uitvoering worden onderbroken door een andere thread; vandaar dat het de onderbroken uitvoer kan werpen. U moet ervoor zorgen dat de uitzondering wordt behandeld door try / catch-blok of door zoekwoorden anderszins te werpen, dit leidt tot de fout in de compile-time. De slaapmethode bevat de vergrendeling van het huidige object in de uitvoering en staat niet toe dat een ander object wordt uitgevoerd totdat de uitvoering is voltooid.

Definitie van wachtmethode

Wachten is de methode die is gedefinieerd in de klasse Object . De wacht-methode wordt gebruikt wanneer verschillende taken (threads) voor dezelfde resource één voor één worstelen. De wacht-methode wanneer het wordt opgeroepen maakt het slot vrij op het object dat de wacht-methode heeft aangeroepen. En geef een ander object de kans om te worden uitgevoerd totdat een waarschuwingsmethode wordt aangeroepen die het slot van het object dat door de wait-methode is vrijgegeven verder hervat. De wachtmethode heeft de volgende vorm.

 Wacht(); wacht (lange milliseconde); wacht (lange milliseconde, int nanoseconde); 

Net als bij de bovenstaande drie vormen van de wachtmethode, heeft de eerste methode geen tijdparameter. Dit betekent dat de uitvoering van de wachtmethode door zal gaan tot de notificatie of de methode notifyAll niet wordt aangeroepen. De rest twee methoden hebben tijdparameters. Dus ze zullen worden uitgevoerd totdat de tijd verstreken is of tot notificatie of noitfy komt. Alle methode wordt eerder aangeroepen dan de tijd verstrijkt. De wachtmethode kan uitzonderingen opleveren. IllegalArgumentException, als het doorgegeven tijdargument negatief is. IllegalMonitorStateException, als de huidige thread de resource niet gebruikt. InterruptedException, als de wachtmethode wordt onderbroken.

Belangrijkste verschillen tussen slaap- en wachtmethode in Java

  1. Het belangrijkste punt dat de slaap- en wachtmethode onderscheidt, is dat de slaapmethode het slot op het object houdt tot het wordt onderbroken of de tijd verloopt. Echter, de wait-methode geeft het slot vrij op het object dat het oproept en geeft andere objecten de kans om uit te voeren.
  2. De slaapmethode is gedefinieerd in de klasse Thread, terwijl de methode wait is gedefinieerd in de klasse Object .
  3. De slaapmethode hoeft niet te worden aangeroepen vanuit de gesynchroniseerde context. Maar de wacht-methode moet worden gebeld van gesynchroniseerd.
  4. De slaapmethode wordt gewekt als de tijd van de methode is verstreken of deze wordt onderbroken door de andere thread. De wachtmethode is gewekt
    wanneer de notificatie of notificatie Alle methode wordt aangeroepen.
  5. De slaapmethode is een statische methode, terwijl de wachtmethode geen statische methode is.
  6. De slaapmethode wordt uitgevoerd op de huidige thread, terwijl de wacht-methode wordt uitgevoerd op het object dat deze aanroept.
  7. De uitzondering die wordt gegenereerd door de slaapmethode is InterruptedException, terwijl de exceptions thrwon by wait-methode IllegalArgumentException, IllegalMonitorStateException, InterruptedException is .

Conclusie:

Als meerdere threads dezelfde resource één voor één willen gebruiken, moet de wait-methode worden gebruikt. Wanneer een thread geen enkele taak wil uitvoeren, moet de slaapmethode worden gebruikt.

Top