Heim  >  Artikel  >  Java  >  Die Unterschiede und Verwendungen zwischen Sleep(), Wait(), Yield()

Die Unterschiede und Verwendungen zwischen Sleep(), Wait(), Yield()

零下一度
零下一度Original
2017-06-30 09:56:483011Durchsuche

Schlafen, der Thread schläft, sodass der gerade Thread für einen bestimmten Zeitraum anhalten und in den Timing-Wartezustand wechseln kann.

Methode: static void sleep(long millis) Nach dem Aufruf von Sleep gibt der aktuelle Thread die CPU auf. Innerhalb des angegebenen Zeitraums erhält der Thread, in dem sich Sleep befindet, keine Gelegenheit zur Ausführung. Threads in diesem Zustand geben keine Synchronisierungssperren/Synchronisierungs-Listener frei.

  Diese Methode wird eher zur Simulation von Netzwerkverzögerungen verwendet, wodurch die Fehlerauswirkung mehrerer Threads, die gleichzeitig auf dieselbe Ressource zugreifen, offensichtlicher wird.

Warten, Thread-Kommunikationsmethode, Klasse java.lang.Object bietet zwei Arten von Methoden zum Betreiben der Thread-Kommunikation.

Wait(): Das Thread-Objekt, das diese Methode ausführt, gibt die Synchronisationssperre frei. Die JVM speichert den Thread im Wartepool und wartet darauf, dass andere Threads den Thread aufwecken.

Notify(): Der Thread, der diese Methode ausführt, weckt jeden Thread, der im Wartepool wartet, und überträgt den Thread zum Warten in den Sperrpool.

notifyAll(): Der Thread, der diese Methode ausführt, weckt alle im Wartepool wartenden Threads und überträgt die Threads zum Warten in den Sperrpool.

 (Hinweis: Die obige Methode kann nur vom synchronen Überwachungssperrobjekt aufgerufen werden, andernfalls ein Fehler IllegalMonitorStateException.)

yield, thread Mit freundlicher Genehmigung bedeutet das, dass das aktuelle Thread-Objekt den Planer auffordert, die CPU aufzugeben, der Planer kann die Aufforderung jedoch ignorieren.

Nach dem Aufruf dieser Methode geht das Thread-Objekt in den Bereitschaftszustand über, sodass es durchaus möglich ist, dass der Thread-Scheduler nach dem Aufruf von yield() einen Thread zur erneuten Ausführung einplant.

 Aus der von Java7 bereitgestellten Dokumentation geht deutlich hervor, dass diese Methode in der Entwicklung selten verwendet wird. Diese Methode wird hauptsächlich zum Debuggen oder Testen verwendet. Dies kann aufgrund von Multi-Thread-Race-Bedingungen hilfreich sein. Der folgende Fehler erscheint erneut .

Außerdem: Der Unterschied zwischen der Sleep-Methode und der Yield-Methode:

 1. Beides kann dazu führen, dass der aktuell laufende Thread die CPU aufgibt und andere Threads abgibt die Möglichkeit zu laufen.

 2. Die Sleep-Methode gibt anderen Threads eine Chance zur Ausführung, berücksichtigt jedoch nicht die Prioritäten anderer Threads. Die Yield-Methode gibt nur Threads mit derselben oder höherer Priorität eine Chance zur Ausführung.

3. Nach dem Aufruf der Sleep-Methode wechselt der Thread in den Timing-Wartezustand. Nach dem Aufruf der Yield-Methode wechselt der Thread in den Bereitschaftszustand.

Thread-Lebenszyklusdiagramm:

 

Das obige ist der detaillierte Inhalt vonDie Unterschiede und Verwendungen zwischen Sleep(), Wait(), Yield(). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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