Sleep and Wait sind zwei Methoden, die für das Multithreading in Java verwendet werden. Die Sleep-Methode gehört zur Thread-Klasse, während die Wait-Methode aus der Object-Klasse stammt. Das Hauptunterschied Zwischen Schlaf und Warten in Java ist das Mit sleep wird die Ausführung des aktuellen Threads für die angegebene Anzahl von Millisekunden angehalten, während mit der wait-Methode der aktuelle Thread gewartet wird, bis ein anderer Thread die notify- oder notifyAll-Methode für das Objekt aufruft.
Ein Thread ist die kleinste Verarbeitungseinheit im Betriebssystem. Es ist ein einzelner sequentieller Steuerungsfluss innerhalb eines Programms. Fäden sind leicht. Multithreading ist der Mechanismus, bei dem mehrere Threads gleichzeitig ausgeführt werden. Programmiersprachen wie Java unterstützen Multithreading. Multithreading bietet Vorteile, da mehrere Threads gleichzeitig ausgeführt werden können und die Threads unabhängig voneinander sind. Es gibt Methoden in Java, die für Multithreading verwendet werden können. Zwei von ihnen schlafen und warten.
1. Übersicht und Schlüsseldifferenz
2. Was ist Schlaf in Java?
3. Was ist in Java warten?
4. Ähnlichkeiten Zwischen Schlaf und Warten in Java
5. Side-by-Side-Vergleich - Schlaf und Wartezeit in Java in Tabellenform
6. Zusammenfassung
In einem Betriebssystem werden mehrere Prozesse ausgeführt. Ein Prozess ist ein Programm in Ausführung. Jeder Prozess kann mehrere Threads haben, und zwischen diesen Threads findet ein Kontextwechsel statt. In Java gibt es zwei Möglichkeiten, einen Thread zu erstellen. Dies ist durch die Erweiterung der Thread-Klasse oder durch die Implementierung der Runnable-Schnittstelle. Die Thread-Klasse verfügt über Konstruktoren und Methoden zum Erstellen und Ausführen von Operationen für einen Thread. Die Thread-Klasse erweitert die Object-Klasse und implementiert die Runnable-Schnittstelle. Die Runnable-Schnittstelle sollte von jeder Klasse implementiert werden, deren Instanzen von einem Thread ausgeführt werden sollen. Wenn der Thread ausgeführt wird, wird der Code, der ausgeführt werden soll, in die run-Methode geschrieben. Der Thread, der ausgeführt werden soll, wird vom Thread-Scheduler ausgewählt. In einem Prozess wird nur ein Thread ausgeführt.
Ein Thread durchläuft mehrere Phasen. Nach dem Erstellen eines Objekts der Thread-Klasse kann der Programmierer die Startmethode aufrufen. Vor dem Aufrufen dieser Methode befindet sich der Thread im neuen Status. Der Thread-Scheduler wählt einen Thread aus, der ausgeführt werden soll. Wenn der Thread noch nicht vom Thread-Scheduler ausgewählt wurde, die Startmethode jedoch aufgerufen wird, befindet sich der Thread in einem ausführbaren Zustand. Nachdem der Thread-Scheduler den Thread zur Ausführung ausgewählt hat, wechselt er in den laufenden Status. Wenn der Thread aktiv ist, derzeit jedoch nicht zur Ausführung berechtigt ist, ist er nicht ausführbar oder blockiert. Nach dem Abschluss der run-Methode wechselt der Thread in den Status terminated. Dies sind die Hauptphasen des Lebenszyklus des Gewindes.
In der Thread-Klasse stehen verschiedene Methoden zur Verfügung, um verschiedene Aufgaben auszuführen. Die Schlafmethode wird verwendet, um die Methode für eine bestimmte Zeitspanne zu schlafen. Die Syntax für die Sleep-Methode lautet public void sleep (lange Millisekunden) und löst InterruptedException aus. Dies bewirkt, dass der gerade ausgeführte Thread die Ausführung für eine bestimmte Anzahl von Millisekunden vorübergehend anhält. Wenn ein anderer Thread den aktuellen Thread unterbricht, wird der unterbrochene Status des aktuellen Threads gelöscht, wenn diese Ausnahme ausgelöst wird.
Abbildung 01: Java-Programm mit Sleep-Methode
Gemäß dem obigen Programm enthält die Run-Methode Code, der ausgeführt werden soll. Im Hauptprogramm werden zwei Objekte von ExampleThread1 erstellt, und die Startmethoden werden für sie aufgerufen. Dadurch kann der Code innerhalb der run-Methode ausgeführt werden. Es wird jeweils nur ein Thread ausgeführt. Mit dem Faden. Schlaf (1000); Der erste Thread kann die Ausführung für 1000 Millisekunden beenden. Wenn sich ein Thread im Ruhezustand befindet, nimmt der Thread-Scheduler den anderen Thread auf.
Möglicherweise greifen mehrere Threads auf eine gemeinsam genutzte Ressource zu. Dies kann dazu führen, dass eine falsche Ausgabe generiert wird. Durch die Thread-Synchronisierung kann nur ein Thread für den Zugriff auf die gemeinsam genutzte Ressource erstellt werden. Nehmen Sie eine Situation wie folgt an. Wenn zwei Threads als t1 und t2 vorhanden sind, beginnt t1, Werte in einer Textdatei mit dem Namen Text1.txt zu speichern. Diese Werte werden für andere Berechnungen verwendet, wenn t1 zurückgegeben wird. Wenn t2 beginnt, bevor t1 zurückkehrt, kann t2 die durch t1 gespeicherten Werte ändern. Dies kann dazu führen, dass t1 eine falsche Ausgabe liefert. Wenn t1 die Datei Text1.txt verwendet, kann diese Datei mit Hilfe der Synchronisierung gesperrt werden, sodass nur von t1 darauf zugegriffen werden kann. Das T2 kann es nicht ändern, bis T1 die Sperre für den Zugriff auf diese Textdatei aufhebt. Wenn die Aufgabe abgeschlossen ist, kann der T1 die Sperre aufheben. Das Schloss wird auch als Monitor bezeichnet.
Die Thread-Synchronisierung kann durch Inter-Thread-Kommunikation erreicht werden. Ein kritischer Abschnitt ist ein Codesegment, das auf die gemeinsam genutzten Ressourcen zugreift. In der Inter-Thread-Kommunikation wird ein Thread in seinem kritischen Abschnitt angehalten, und ein anderer Thread darf in den gleichen kritischen Abschnitt gelangen, der ausgeführt werden soll. Es wird mit den Methoden wait, notify und notifyAll implementiert. Sie gehören zur Object-Klasse. Die wait-Methode wird verwendet, um zuzulassen, dass der aktuelle Thread die Sperre aufhebt und wartet, bis ein anderer Thread die notify- oder notifyAll-Methode für das Objekt aufruft. Die Benachrichtigungsmethode wird verwendet, um einen einzelnen Thread zu aktivieren, der auf die Sperre wartet. NotifyAll aktiviert alle Threads, die auf die Sperre warten.
Abbildung 02: Rechnerklasse
Abbildung 03: Hauptmethode
Die Klasse Calculator erweitert den Thread. Der synchronisierte Block befindet sich innerhalb der Run-Methode. Die for-Schleife und Benachrichtigungsmethode befindet sich innerhalb des synchronisierten Blocks. Innerhalb der Hauptmethode wird eine Instanz eines Threads erstellt und die Startmethode für diese Instanz aufgerufen. Die Hauptmethode wartet, bis der Thread eine Benachrichtigung ausgibt. Bei der Ausführung des Programms wartet die Hauptmethode bis zur vollständigen Ausführung der Ausführungsmethode und wartet auf die Benachrichtigungsmethode. Sobald die Benachrichtigungsmethode aufgerufen wird, stoppt die Hauptmethode und wartet mit der Ausführung des restlichen Codes. Main wartet, bis der Calculator-Thread abgeschlossen ist. Zum Schluss wird das Ergebnis der Summe gedruckt.
Wenn kein synchronisierter Block vorhanden ist und die Hauptmethode einen Code wie unten enthält, gibt sie die Ausgabe als Null an, da sie nicht auf den Abschluss des anderen Threads wartet.
Rechner t1 = neuer Rechner ();
t1. Start ();
System.out.println (t1.sum);
Schlaf gegen Warten in Java | |
Bei der Sleep-Methode setzt der aktuelle Thread die Ausführung für die angegebene Anzahl von Millisekunden aus, abhängig von der Genauigkeit und Genauigkeit der Systemzeitgeber und Zeitplaner. | Die wait-Methode bewirkt, dass der aktuelle Thread wartet, bis ein anderer Thread die notify- oder notifyAll-Methode für das Objekt aufruft. |
Assoziation mit dem Schloss | |
Die Schlafmethode gibt die Sperre für ein Objekt während der Synchronisierung nicht frei. | Die wait-Methode gibt die Sperre während der Synchronisation frei. |
Methode der Ausführung | |
Die Sleep-Methode wird im aktuellen Thread ausgeführt. | Die wait-Methode wird für das Objekt aufgerufen. |
Assoziierte Klasse | |
Der Schlaf ist eine Methode der Thread-Klasse. | Das Warten ist eine Methode der Object-Klasse. |
Fertigstellung | |
Der Schlafvorgang ist abgeschlossen, nachdem die angegebene Zeit abgelaufen ist. | Die wait-Methode wird durch den Aufruf der Methoden notify oder notifyAll unterbrochen. |
Auf dem Betriebssystem werden mehrere Prozesse ausgeführt. Jeder Prozess kann mehrere Threads haben. Ein Thread ist die kleinste Verarbeitungseinheit in einem Betriebssystem. Java-Programmiersprache unterstützt Multithreading. Dadurch können mehrere Threads gleichzeitig ausgeführt werden. Sleep und Wait sind zwei Methoden, die beim Implementieren von Multithreading verwendet werden können. Der Unterschied zwischen "sleep" und "wait" in Java besteht darin, dass mit dem sleep die Ausführung des aktuellen Threads für die angegebene Anzahl von Millisekunden angehalten wird, während die wait-Methode verwendet wird, um den aktuellen Thread zu warten, bis ein anderer Thread die Benachrichtigungs- oder notifyAll-Anweisung aufruft Methode für das Objekt.
1. "Inter-Thread-Kommunikation in Java - Javatpoint".. JavaTPoint. Hier verfügbar
2. Inter-Thread Kommunikation in Java Multithreading | Core Java Tutorial | Studieren heute Nacht. Hier verfügbar