Heim > Java > javaLernprogramm > Was ist der Unterschied zwischen sleep() und wait()?

Was ist der Unterschied zwischen sleep() und wait()?

云罗郡主
Freigeben: 2018-10-15 13:55:19
nach vorne
3353 Leute haben es durchsucht

Der Inhalt dieses Artikels handelt von sleep() und wait(). Was sind die Unterschiede zwischen ihnen? , hat einen bestimmten Referenzwert, Freunde in Not können sich darauf beziehen, ich hoffe, es wird Ihnen hilfreich sein.

Was ist der Unterschied zwischen sleep() und wait()?

sleep ist eine Methode der Thread-Klasse (Thread), die bewirkt, dass dieser Thread die Ausführung für eine bestimmte Zeit anhält und anderen Threads Ausführungsmöglichkeiten gibt, aber der Überwachungsstatus bleibt weiterhin erhalten und wird automatisch fortgesetzt, wenn die Die Zeit kommt. Durch den Aufruf von Sleep wird die Objektsperre nicht aufgehoben. Wait ist eine Methode der Object-Klasse. Der Aufruf der Wait-Methode für dieses Objekt führt dazu, dass dieser Thread die Objektsperre aufgibt und in den Wartesperrenpool für dieses Objekt eintritt Der Thread betritt den Objektsperrenpool und bereitet sich darauf vor, ihn zu erhalten. Die Objektsperre wechselt in den Ausführungsstatus.

Wenn ein Thread eine synchronisierte Methode eines Objekts eingibt, ob andere Threads andere Methoden dieses Objekts eingeben können.

Andere Threads können nur auf andere nicht synchronisierte Methoden des Objekts zugreifen, synchronisierte Methoden können nicht eintreten.

Welche Thread-Synchronisationsmethoden gibt es?

wait(): versetzt einen Thread in einen Wartezustand und gibt die Sperre des von ihm gehaltenen Objekts frei.

sleep(): versetzt einen laufenden Thread in einen Ruhezustand, der statisch ist Methode: Rufen Sie diese Methode auf, um die Ausnahme „InterruptedException“ abzufangen.

notify(): Aktivieren Sie einen Thread im Wartezustand. Beachten Sie, dass Sie beim Aufrufen dieser Methode keinen Thread im Wartezustand aktivieren können bestimmt, welcher Thread aktiviert werden soll, und nicht nach Priorität;

notifyAll(): aktiviert alle Threads im Wartezustand. Beachten Sie, dass es nicht darum geht, allen aktivierten Threads eine Objektsperre zu geben, sondern sie miteinander konkurrieren zu lassen . .

Es gibt mehrere Implementierungsmethoden für Multithreading und mehrere Implementierungsmethoden für die Synchronisierung.

Es gibt zwei Möglichkeiten, Multithreading zu implementieren, nämlich die Thread-Klasse zu erben und die Runnable-Schnittstelle zu implementieren.

Es gibt zwei Möglichkeiten, die Synchronisierung zu implementieren, nämlich synchronisiert, warten und benachrichtigen.

Was sind die Gemeinsamkeiten und Unterschiede zwischen Synchronisation und Asynchronität und unter welchen Umständen werden sie verwendet?

Wenn Daten zwischen Threads geteilt werden. Wenn beispielsweise die geschriebenen Daten in Zukunft von einem anderen Thread gelesen werden oder die gelesenen Daten von anderen Daten geschrieben wurden, handelt es sich bei diesen Daten um gemeinsam genutzte Daten, auf die synchron zugegriffen werden muss. Asynchrone Programmierung sollte verwendet werden, wenn die Anwendung eine Methode aufruft, deren Ausführung lange dauert und das Programm nicht auf die Rückkehr der Methode warten soll. In vielen Fällen ist der asynchrone Ansatz oft effizienter.

Verwenden Sie run() oder start(), um einen Thread zu starten.

Das Starten eines Threads besteht darin, die start()-Methode aufzurufen, um die durch den Thread dargestellte virtuelle Maschine in einen ausführbaren Zustand zu versetzen, was bedeutet, dass sie von der JVM geplant und ausgeführt werden kann Der Thread wird sofort ausgeführt. Die run()-Methode kann einen Thread stoppen, indem sie ein Must-Exit-Flag generiert.

Die Grundkonzepte von Threads, die Grundzustände von Threads und die Beziehung zwischen Zuständen.

Ein Thread bezieht sich auf eine Ausführungseinheit, die während der Ausführung Programmcode ausführen kann. Jedes Programm verfügt über mindestens einen Thread, der das Programm selbst ist.

In Java gibt es vier Arten von Threads Die Status sind: läuft, bereit, ausgesetzt und beendet.

Beschreiben Sie kurz die Ähnlichkeiten und Unterschiede zwischen synchronisiert und java.util.concurrent.locks.Lock.

Hauptähnlichkeiten: Lock kann alle durch synchronisiert implementierten Funktionen ausführen.

Hauptunterschiede: Lock verfügt über eine präzisere Thread-Semantik und eine bessere Leistung als synchronisiert. synchronisiert gibt die Sperre automatisch frei, Lock muss jedoch vom Programmierer manuell freigegeben werden und muss in der final-Klausel freigegeben werden.

Auf wie viele Arten kann man einen Thread in Java implementieren? Welche Schlüsselwörter werden zum Ändern von Synchronisierungsmethoden verwendet? Warum sind stop() und suspend() veraltet?

Es gibt zwei Implementierungsmethoden, die darin bestehen, Thread zu erben und die Runnable-Schnittstelle zu implementieren.

Ändern Sie die Synchronisierungsmethode mit

und lehnen Sie die Verwendung von stop() ab es ist unsicher. Es gibt alle von Threads erworbenen Sperren frei, und wenn sich die Objekte in einem inkohärenten Zustand befinden, können andere Threads sie in diesem Zustand überprüfen und ändern. Daher ist es schwierig, das eigentliche Problem zu erkennen.

Die suspend()-Methode ist anfällig für Deadlocks. Wenn suspend() aufgerufen wird, stoppt der Zielthread, hält aber weiterhin die zuvor erworbene Sperre. Zu diesem Zeitpunkt kann kein anderer Thread auf die gesperrte Ressource zugreifen, es sei denn, der „angehaltene“ Thread nimmt den Betrieb wieder auf. Wenn ein Thread den Zielthread fortsetzen und gleichzeitig versuchen möchte, eine gesperrte Ressource zu verwenden, kommt es zu einem Deadlock. Daher sollten Sie suspend() nicht verwenden, sondern ein Flag in Ihre Thread-Klasse einfügen, um anzugeben, ob der Thread aktiv oder angehalten sein soll. Wenn das Flag angibt, dass der Thread angehalten werden soll, verwenden Sie wait(), um ihn in den Wartezustand zu versetzen. Wenn das Flag angibt, dass der Thread fortgesetzt werden soll, verwenden Sie notify(), um den Thread neu zu starten.

Das Obige ist eine vollständige Einführung in die Unterschiede zwischen sleep() und wait(). Wenn Sie mehr über Java-Video-Tutorials erfahren möchten, achten Sie bitte darauf zur chinesischen PHP-Website.

Das obige ist der detaillierte Inhalt vonWas ist der Unterschied zwischen sleep() und wait()?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:cnblogs.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage