Was passiert mit einem wartenden Thread, wenn notify() nicht aufgerufen wird? Ist das ein ungewolltes Aufwachen?Was passiert mit einem wartenden Thread, wenn notify() nicht aufgerufen wird?
5
A
Antwort
6
Wenn ein Thread
warten benachrichtigt wird nicht von notify()
oder notifyAll()
auf dem Objekt aufgerufen wird der genannte Thread wartet, dann eine beliebige der folgenden kann passieren:
- die
Thread
hält in Warte das Objekt Warten Pool - die
Thread
wird Runnable, wenn eine Zeitüberschreitung angegeben wurde ed und die Zeit verstreicht - die
Thread
und wird wieder runnable - für kein Grund überhaupt die
Thread
aufwacht unterbrochen wird, dh es weder noch unterbrochen
Der letzte Fall ist bekannt als Spurious Wake-Up und ist einer der Gründe, warum auf Wake-up ein Thread
sollte immer prüfen, ob die Bedingung, auf die gewartet wurde, wahr ist oder nicht. Wenn nicht, sollte die Thread
anrufen und gehen Sie wieder wait()
.
Verwandte Themen
- 1. Java notify() wird vor wait() aufgerufen
- 2. Was passiert, wenn 'return' innerhalb eines 'using' Blocks aufgerufen wird?
- 3. Was passiert, wenn Rekursion in einer Methode zweimal aufgerufen wird?
- 4. Was passiert, wenn eine neue Instanz eines Objekts aufgerufen wird?
- 5. Was passiert, wenn die() innerhalb einer Funktion aufgerufen wird
- 6. Was passiert mit einem Applet, wenn der Browser geschlossen wird?
- 7. Was passiert mit einem weak_ptr, wenn sein shared_ptr zerstört wird?
- 8. Java: Was passiert, wenn eine Runnable, die in einem Thread verwendet wird, auf null gesetzt wird?
- 9. Was passiert mit anderen Threads, wenn ein Thread sich verzweigt()?
- 10. Wenn die main-Methode die Ausführung beendet, was passiert mit einem lang laufenden Thread?
- 11. Was passiert mit Mutex, wenn der Thread, der es erworben hat, beendet wird?
- 12. Java Thread notify() vs. notifyAll()
- 13. Run-Methode wird nicht aufgerufen Thread
- 14. Die Steuerung kehrt nach der Benachrichtigung nicht zum wartenden Thread zurück
- 15. Welcher Thread wird aufgerufen, wenn eine Android-Anwendung gestartet wird?
- 16. Was passiert, wenn ein .NET-Thread eine Ausnahme auslöst?
- 17. Was passiert, wenn Interrupt auf Thread, die nicht auf eine Sperre wartet
- 18. Was passiert, wenn der Thread vor einem anderen Thread auf ihn wartet (beitreten)?
- 19. Was wird ausgedruckt, wenn dolookup aufgerufen wird?
- 20. Was passiert, wenn ein perform_async aufgerufen wird, aber sidekiq nicht läuft?
- 21. Was passiert, wenn eine App übersendet wird?
- 22. Was passiert, wenn dieser Code ausgeführt wird?
- 23. Was passiert, wenn ein Prozess gespalten wird?
- 24. Was passiert, wenn ein Thread eine Exception auslöst?
- 25. Was passiert, wenn ein Ereignis ausgelöst wird
- 26. Was passiert, wenn veröffentlicht
- 27. Was passiert, wenn der Thread abstürzt, was ist besser Thread oder Prozess?
- 28. Was passiert mit einer nicht geschlossenen Datenbankverbindung?
- 29. Was passiert in Qt mit einem Objekt, wenn ein Thread fertig ist?
- 30. java: Wenn notify() vor dem Lock-Release immer aufgerufen wird, wie könnten wartende Threads diese Sperre erhalten?
Sie meinen Thread wird aufwachen ohne zu benachrichtigen? –
Ja, ich habe angerufen, aber nicht programmiert um zu benachrichtigen. – amitguptageek
Störende Wakeups sind sehr selten und unwahrscheinlich. Verwenden Sie 'notifyAll()'? –