Schlüsselunterschied – schlafen vs. warten in Java
Sleep und Wait sind zwei Methoden, die für Multithreading in Java verwendet werden. Die Sleep-Methode gehört zur Thread-Klasse, während die Wait-Methode zur Object-Klasse gehört. Der Hauptunterschied zwischen sleep und wait in Java besteht darin, dass sleep verwendet wird, um die Ausführung des aktuellen Threads für die angegebene Anzahl von Millisekunden auszusetzen, während die wait-Methode verwendet wird, um zu bewirken, dass der aktuelle Thread wartet, bis ein anderer Thread die Benachrichtigung oder aufruft NotifyAll-Methode für das Objekt.
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 zum gleichzeitigen Ausführen mehrerer Threads. Programmiersprachen wie Java unterstützen Multithreading. Multithreading hat Vorteile, da es ermöglicht, mehrere Threads gleichzeitig auszuführen und die Threads unabhängig voneinander sind. Es gibt Methoden in Java, die für Multithreading verwendet werden können. Zwei davon schlafen und warten.
Was ist Schlaf auf Java?
In einem Betriebssystem laufen mehrere Prozesse. 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 geschieht durch Erweitern der Thread-Klasse oder durch Implementieren der Runnable-Schnittstelle. Die Thread-Klasse verfügt über Konstruktoren und Methoden zum Erstellen und Ausführen von Operationen an einem 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 auszuführende Code in die run-Methode geschrieben. Der Thread, der ausgeführt werden soll, wird vom Thread-Scheduler ausgewählt. In einem einzelnen 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 Zustand. Der Thread-Scheduler wählt einen auszuführenden Thread aus. Wenn der Thread noch nicht vom Thread-Scheduler ausgewählt wurde, aber die Startmethode aufgerufen wird, befindet sich der Thread in einem lauffähigen Zustand. Nachdem der Thread-Scheduler den auszuführenden Thread ausgewählt hat, geht er in den Ausführungszustand über. Wenn der Thread aktiv ist, aber derzeit nicht ausgeführt werden kann, befindet er sich in einem nicht ausführbaren oder blockierten Zustand. Nach Abschluss der run-Methode geht der Thread in den beendeten Zustand. Das sind die Hauptphasen des Thread-Lebenszyklus.
In der Thread-Klasse stehen verschiedene Methoden zur Verfügung, um verschiedene Aufgaben auszuführen. Die Sleep-Methode wird verwendet, um die Methode für eine bestimmte Zeitdauer in den Ruhezustand zu versetzen. Die Syntax für die sleep-Methode ist public void sleep (lange Millisekunden) löst InterruptedException aus. Es bewirkt, dass der aktuell ausgeführte Thread die Ausführung vorübergehend für eine bestimmte Anzahl von Millisekunden 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äß obigem Programm enthält die run-Methode Code, der ausgeführt werden soll. Im Hauptprogramm werden zwei Objekte von ExampleThread1 erstellt und die Startmethoden darauf aufgerufen. Dadurch kann der Code innerhalb der run-Methode ausgeführt werden. Es wird immer nur ein Thread ausgeführt. Mit dem Faden.schlafen (1000); ermöglicht es dem ersten Thread, die Ausführung für 1000 Millisekunden zu beenden. Wenn ein Thread schläft, übernimmt der Thread-Scheduler den anderen Thread.
Was heißt warten in Java?
Möglicherweise greifen mehrere Threads auf eine gemeinsam genutzte Ressource zu. Dies kann dazu führen, dass eine falsche Ausgabe generiert wird. Die Threadsynchronisierung kann verwendet werden, um nur einen Thread für den Zugriff auf die gemeinsam genutzte Ressource zu veranlassen. Nehmen Sie eine Situation wie folgt an. Wenn es zwei Threads wie t1 und t2 gibt, beginnt t1 mit dem Speichern von Werten in einer Textdatei namens Text1.txt. Diese Werte werden für andere Berechnungen verwendet, wenn t1 zurückkehrt. Wenn t2 beginnt, bevor t1 zurückkehrt, kann t2 die von t1 gespeicherten Werte ändern. Dies kann dazu führen, dass t1 eine falsche Ausgabe liefert. Mithilfe der Synchronisierung kann diese Datei gesperrt werden, wenn t1 beginnt, die Datei Text1.txt zu verwenden, sodass nur t1 darauf zugreifen kann. Der t2 kann es nicht ändern, bis t1 die Sperre für den Zugriff auf diese Textdatei freigibt. Wenn die Aufgabe abgeschlossen ist, kann der t1 die Sperre freigeben. Das Schloss wird auch als Monitor bezeichnet.
Thread-Synchronisation kann durch Inter-Thread-Kommunikation erreicht werden. Ein kritischer Abschnitt ist ein Codesegment, das auf die gemeinsam genutzten Ressourcen zugreift. Bei der Inter-Thread-Kommunikation wird ein Thread angeh alten, während er in seinem kritischen Abschnitt läuft, und einem anderen Thread wird erlaubt, in denselben kritischen Abschnitt einzutreten, um ausgeführt zu werden. Es wird mit den Methoden Wait, Notify und NotifyAll implementiert. Sie gehören zur Objektklasse. Die Wait-Methode wird verwendet, um dem aktuellen Thread zu ermöglichen, die Sperre freizugeben und zu warten, bis ein anderer Thread die Notify- oder NotifyAll-Methode für das Objekt aufruft. Die Methode "notify" wird verwendet, um einen einzelnen Thread aufzuwecken, der auf die Sperre wartet. Das NotifyAll weckt alle Threads auf, 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 die Notify-Methode befinden sich innerhalb des synchronisierten Blocks. Innerhalb der Hauptmethode wird eine Instanz eines Threads erstellt, und die Startmethode wird für diese Instanz aufgerufen. Die Hauptmethode wartet, bis der Thread eine Benachrichtigung gibt. Beim Ausführen des Programms wartet die Main-Methode bis zur vollständigen Ausführung der Run-Methode und wartet auf die Notify-Methode. Sobald die Notify-Methode aufgerufen wird, hört die Main-Methode auf zu warten und beginnt mit der Ausführung des restlichen Codes. Main wartet, bis der Calculator-Thread abgeschlossen ist. Abschließend wird das Ergebnis der Summe ausgegeben.
Wenn es keinen synchronisierten Block gibt und die Hauptmethode einen Code wie unten hat, gibt sie die Ausgabe als Null aus, weil sie nicht auf den Abschluss des anderen Threads wartet.
Rechner t1=neuer Rechner ();
t1. starten ();
System.out.println (t1.sum);
Was ist die Ähnlichkeit zwischen schlafen und warten in Java?
Sleep und Wait sind Methoden, die bei der Implementierung von Multithreading in Java verwendet werden können
Was ist der Unterschied zwischen schlafen und warten in Java?
schlafen vs. warten in Java |
|
Die Sleep-Methode bewirkt, dass der aktuelle Thread die Ausführung für die angegebene Anzahl von Millisekunden aussetzt, abhängig von der Präzision und Genauigkeit der System-Timer und -Scheduler. | 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 Schloss | |
Die Sleep-Methode hebt die Sperre eines Objekts während der Synchronisation nicht auf. | Die Wartemethode hebt die Sperre während der Synchronisation auf. |
Ausführungsmethode | |
Die Sleep-Methode wird im aktuellen Thread ausgeführt. | Die Wait-Methode wird für das Objekt aufgerufen. |
Zugehörige Klasse | |
Der Schlaf ist eine Methode der Thread-Klasse. | Das Warten ist eine Methode der Object-Klasse. |
Abschluss | |
Der Schlafvorgang ist nach Ablauf der angegebenen Zeit abgeschlossen. | Die Wait-Methode wird durch den Aufruf der Methode "notify" oder "notifyAll" unterbrochen. |
Zusammenfassung – schlafen vs. warten in Java
Auf dem Betriebssystem laufen mehrere Prozesse. Jeder Prozess kann mehrere Threads haben. Ein Thread ist die kleinste Verarbeitungseinheit in einem Betriebssystem. Die Programmiersprache Java unterstützt Multithreading. Es ermöglicht die gleichzeitige Ausführung mehrerer Threads. Sleep und Wait sind zwei Methoden, die bei der Implementierung von Multithreading verwendet werden können. Der Unterschied zwischen sleep und wait in Java besteht darin, dass sleep verwendet wird, um die Ausführung des aktuellen Threads für die angegebene Anzahl von Millisekunden auszusetzen, während die wait-Methode verwendet wird, um zu bewirken, dass der aktuelle Thread wartet, bis ein anderer Thread die Notify- oder NotifyAll-Anweisung aufruft Methode für das Objekt.