Empfohlen, 2019

Tipp Der Redaktion

Unterschied zwischen sleep () und wait () Methode in Java

Die Methode Schlaf und Warten klingt wie die gleiche Aufgabe, unterscheidet sich jedoch erheblich voneinander. Die Sleep-Methode gehört zur Thread-Klasse, und die Wait-Methode gehört zur Object-Klasse. Der wichtigste Unterschied zwischen beiden ist, dass die Schlafmethode die Sperre für das Objekt aufrechterhält, bis es unterbrochen wird oder die Ausführung beendet wird. Auf der anderen Seite gibt die wait- Methode die Sperre für das Objekt frei, damit die anderen Objekte ausgeführt werden können, bis sie von der Benachrichtigungsmethode wieder aufgenommen wird. Es gibt einige weitere Unterschiede zwischen der Schlaf- und Wartemethode. Sie können sie in der unten gezeigten Vergleichstabelle untersuchen.

Vergleichstabelle

Vergleichsgrundlageschlafenwarten
BasicDie Schlafmethode gibt die Sperre für ein Objekt erst dann frei, wenn es unterbrochen wird.Die Wait-Methode gibt die Sperre für das Objekt frei, damit andere Objekte ausgeführt werden können, bis die notifyAll-Methode aufgerufen wird.
KlasseDie Schlafmethode wird in der Thread-Klasse definiert.Die Wait-Methode ist in der Object-Klasse definiert.
SynchronisiertDie Schlafmethode muss nicht im synchronisierten Kontext aufgerufen werden.Die Wait-Methode muss im synchronisierten Kontext aufgerufen werden.
FertigstellungDie Ausführung der Sleep-Methode ist abgeschlossen, wenn ein Thread sie unterbricht oder die Sleep-Time-Methode abgelaufen ist.Die Ausführung der Wait-Methode ist abgeschlossen, wenn die Methode notify () oder notifyAll () sie unterbricht.
StatischDie Schlafmethode ist eine statische Methode.Die Wait-Methode ist nicht statisch, deshalb braucht sie ein Objekt, um sie aufzurufen.
AusführungDie Sleep-Methode wird im aktuellen Thread ausgeführt.Die wait-Methode wird für das Objekt ausgeführt.
AusnahmeInterruptedExceptionIllegalArgumentException, IllegalMonitorStateException, InterruptedException.

Definition der Schlafmethode

Die Sleep-Methode ist die statische Methode der Thread- Klasse. Die Sleep-Methode wird aufgerufen, wenn ein Thread für einen bestimmten Zeitraum keine Aufgabe ausführen möchte. Die Schlafmethode schließt ihre Ausführung entweder ab, wenn der Zeitpunkt der Methode abgelaufen ist, oder sie wird durch einen anderen Thread in der Ausführung unterbrochen. Nachdem die Sleep-Methode abgeschlossen ist, erhält der Thread wieder den Status "lauffähig". Es gibt zwei von der Schlafmethode, wie unten gezeigt.

 öffentlicher statischer nativer Schlaf (lange Millisekunde); öffentlicher statischer Leerraumschlaf (lange Millisekunden und int. Nanosekunde); 

In der obigen Form können Sie beobachten, wie lange die Schlafmethode ist. Dies liegt daran, dass ein Thread immer für eine bestimmte im Parameter angegebene Zeit inaktiv ist. Die Sleep-Methode kann während der Ausführung von jedem anderen Thread unterbrochen werden. Daher kann es die InterruptedExecption auslösen. Sie müssen darauf achten, dass die Ausnahme entweder durch den try / catch-Block oder durch die Throws-Schlüsselwörter behandelt wird. Andernfalls führt dies zu einem Fehler bei der Kompilierung. Die Schlafmethode hält die Sperre für das aktuelle Objekt in der Ausführung und lässt keine anderen Objekte ausgeführt werden, bis die Ausführung abgeschlossen ist.

Definition der Wait-Methode

Wait ist die in der Object- Klasse definierte Methode. Die wait-Methode wird verwendet, wenn mehrere Tasks (Threads) nacheinander für dieselbe Ressource kämpfen. Wenn die wait-Methode aufgerufen wird, gibt sie die Sperre für das Objekt frei, das die wait-Methode aufgerufen hat. Geben Sie die Möglichkeit, dass ein anderes Objekt ausgeführt wird, bis eine Benachrichtigungsmethode aufgerufen wird, die die Sperre für das von der wait-Methode freigegebene Objekt fortsetzt. Die Wait-Methode hat das folgende Formular.

 warten(); warte (lange Millisekunde); warten (lange Millisekunde, int. Nanosekunde); 

Da in den drei oben genannten Formen der wait-Methode die erste Methode keinen Zeitparameter hat, bedeutet dies, dass die wait-Methode ausgeführt wird, bis notify oder notifyAll aufgerufen wird. Die restlichen zwei Methoden haben Zeitparameter. Sie werden also ausgeführt, bis die Zeit abgelaufen ist oder bis die Benachrichtigungs- oder noitfyAll-Methode vor dem Ablauf der Zeit aufgerufen wird. Die wait-Methode kann Ausnahmen auslösen. IllegalArgumentException, wenn das übergebene Zeitargument negativ ist. IllegalMonitorStateException, wenn der aktuelle Thread die Ressource nicht verwendet. InterruptedException, wenn die wait-Methode unterbrochen wird.

Hauptunterschiede zwischen der Sleep- und Wait-Methode in Java

  1. Der Hauptpunkt, der die Sleep- und Wait-Methode auszeichnet, besteht darin, dass die Sleep-Methode die Sperre für das Objekt aufrechterhält, bis es unterbrochen wird oder seine Zeit abläuft. Die wait-Methode gibt jedoch die Sperre für das aufrufende Objekt frei und gibt anderen Objekten die Möglichkeit zur Ausführung.
  2. Die Sleep-Methode ist in der Thread- Klasse definiert, wohingegen die Wait-Methode in der Object- Klasse definiert ist.
  3. Die Sleep-Methode muss nicht aus einem synchronisierten Kontext aufgerufen werden. Die wait-Methode muss jedoch von synchronisiert aufgerufen werden.
  4. Die Sleep-Methode wird aktiviert, wenn die Zeit der Methode abgelaufen ist oder durch den anderen Thread unterbrochen wird. Die Wartemethode wird aktiviert
    Wenn die Benachrichtigungs- oder Benachrichtigungsmethode All aufgerufen wird.
  5. Die Sleep-Methode ist eine statische Methode, wohingegen die Wait-Methode keine statische Methode ist.
  6. Die Sleep-Methode wird im aktuellen Thread ausgeführt, wohingegen die Wait-Methode für das Objekt ausgeführt wird, das sie aufruft.
  7. Die durch die sleep-Methode ausgelöste Ausnahme ist InterruptedException, während die durch die wait-Methode ausgeführten Ausnahmen IllegalArgumentException, IllegalMonitorStateException und InterruptedException sind .

Fazit:

Wenn mehrere Threads nacheinander dieselbe Ressource verwenden möchten, muss die wait-Methode verwendet werden. Wenn ein Thread keine Aufgabe ausführen möchte, muss die Sleep-Methode verwendet werden.

Top