Was ist der Unterschied zwischen einem wait()
und sleep()
in Threads?
Ist mein Verständnis richtig, dass ein wait()
-ender Thread sich immer noch im Laufmodus befindet und CPU-Zyklen verwendet, während ein sleep()
-ender Thread keine CPU-Zyklen verbraucht?
Warum haben wir beide wait()
und sleep()
?
Wie unterscheidet sich deren Implementierung auf niedrigerer Ebene?
61 Stimmen
Sehr gute Frage. Die Semantik beider ist leicht zu verwechseln.
1 Stimmen
Sehr gute Fragen, aber sie sind 2 in einem. Warum wir beide haben, ist nicht dasselbe wie wie sie auf einer niedrigeren Ebene implementiert werden können (und nicht sind!). Darauf habe ich auch geantwortet.
0 Stimmen
Angenommen ein Thread A befindet sich in einem synchronisierten Block, und während er in der CPU ist, wird dieser Thread einem anderen Thread B übergeben. In welchem Zustand wird Thread A jetzt sein? Werden die anderen Threads, die auf diesem synchronisierten Block warten, jetzt eintreten?
3 Stimmen
Hier ist ein guter Artikel, der es beschreibt: qat.com/using-waitnotify-instead-thread-sleep-java
3 Stimmen
Es ist GANZ genau das Gegenteil - sleep "verwendet" alle verfügbaren CPU-Zyklen, aber da der Thread sich im "WARTEN" -Zustand befindet, können diese bei Bedarf abgegeben werden - tatsächlich geben die meisten Betriebssysteme automatisch die Zyklen ab WENN es möglich ist, daher wird Ihr Thread keine tatsächliche CPU-Last erzeugen... auf älteren Betriebssystemen wird er dies jedoch tun. Object.wait() hingegen verwendet NIE Zyklen (während er nicht benachrichtigt wird), da dies in vielen Fällen über Software-Unterbrechungen realisiert wird - private, flüchtige und transparente Sperren, implementiert durch die JVM. Thread.sleep ist schlechte Praxis.
0 Stimmen
@specializt "Thread.sleep ist eine schlechte Praxis", wenn es anstelle von wait verwendet wird. siehe stackoverflow.com/questions/17826651/… Aber guter Kommentar dabei.
0 Stimmen
Wenn Sie gerade auf diese Frage gestoßen sind, helfen Ihnen diese beiden Fragen, weitere Details zu erhalten, wenn Sie nach dem Lesen der Antwort verwirrt sind stackoverflow.com/questions/3362303/whats-a-monitor-in-java stackoverflow.com/questions/30262209/…