Kann mir bitte jemand den Unterschied erklären zw Sleeping, Wait, Parkund Monitor Thread-Zustände in VisualVM.
Das habe ich gefunden:
Running: Thread läuft noch. Sleeping: Thread schläft (Methode yield() wurde für das Thread-Objekt aufgerufen) Wait: Thread wurde durch einen Mutex oder eine Barriere blockiert und wartet darauf, dass ein anderer Thread die Sperre freigibt Park: Geparkte Threads werden suspendiert, bis sie eine Genehmigung erhalten. Das Entparken eines Threads erfolgt normalerweise durch Aufrufen der Methode unpark() für das Thread-Objekt Monitor: Threads warten darauf, dass eine Bedingung wahr wird, um die Ausführung fortzusetzen
Was ich nicht verstehe ist der State Park, woran hängt eigentlich der Thread? Wie erkenne ich im Code, was dazu geführt hat, dass der Thread seine Ausführung ausgesetzt hat?
Kann mich bitte jemand diesbezüglich anleiten.
Vielen Dank.
Maciej Cygan
Ich habe ein sehr schönes Diagramm gefunden, das so ziemlich alles beschreibt, was Sie wissen müssen / wollen.
Neu
Der Thread befindet sich im neuen Zustand, wenn Sie eine Instanz der Thread-Klasse erstellen, jedoch vor dem Aufruf der start()-Methode.
Lauffähig
Der Thread befindet sich nach Aufruf der Methode start() in einem lauffähigen Zustand, aber der Thread-Scheduler hat ihn nicht als laufenden Thread ausgewählt.
Betrieb
Der Thread befindet sich im laufenden Zustand, wenn der Thread-Scheduler ihn ausgewählt hat.
Zeitgesteuertes Warten
Timed Waiting ist ein Thread-Zustand für einen Thread, der mit einer bestimmten Wartezeit wartet. Ein Thread befindet sich im zeitgesteuerten Wartezustand, weil eine der folgenden Methoden mit einer angegebenen positiven Wartezeit aufgerufen wird:
Thread.sleep (Schlafzeit)
Objekt.warten (Zeitüberschreitung)
Thread.join (Zeitüberschreitung)
LockSupport.parkNanos (Zeitüberschreitung)
LockSupport.parkUntil (Zeitüberschreitung)
Nicht ausführbar (blockiert)
Dies ist der Zustand, in dem der Thread noch aktiv ist, aber derzeit nicht ausgeführt werden kann.
Beendet
Ein Thread befindet sich im beendeten oder toten Zustand, wenn seine run()-Methode beendet wird.
Hoffentlich beantwortet das deine Frage :).
Parken:
Deaktiviert den aktuellen Thread für Threadplanungszwecke, es sei denn, die Genehmigung ist verfügbar.
Threads werden geparkt oder angehalten, wenn Sie es so nennen möchten, da sie keine Ausführungsberechtigung haben. Sobald die Berechtigung erteilt wurde, wird der Thread entparkt und ausgeführt.
Genehmigungen von LockSupport sind Threads zugeordnet (dh die Genehmigung wird einem bestimmten Thread erteilt) und sammeln sich nicht an (dh es kann nur eine Genehmigung pro Thread geben, wenn der Thread die Genehmigung verbraucht, verschwindet sie).
Vielen Dank für Ihre Antwort. Ich habe das auch durchgemacht, aber irgendwie blieb meine Frage immer noch unbeantwortet. Könnten Sie bitte meine Frage noch einmal durchgehen; Ich habe es aktualisiert. Ich suche speziell nach einer Antwort bezüglich des Parkstaates.
– Ali Shah Ahmed
10. Dezember 2014 um 16:56 Uhr
danke nochmal für die aktualisierung. Wartet der Thread also im Parkzustand darauf, dass er geplant wird, oder wartet er auf eine bestimmte Bedingung?
– Ali Shah Ahmed
11. Dezember 2014 um 11:09 Uhr
@AliShahAhmed Thread wartet auf die Erlaubnis (Bedingung) zur Ausführung – wenn diese Bedingung für einen bestimmten Zeitraum nicht erfüllt ist, wird das Timeout erreicht und der Thread beendet – PS. Sorry für die verspätete Antwort haha
– Maciej Cygan
12. Juli 2016 um 15:27 Uhr
Jeremy
VisualVM ordnet den Java-Thread-Status (wie in der Antwort von @Maciej beschrieben) dem Status zu, der in seiner Benutzeroberfläche wie folgt dargestellt wird:
Sleeping und Park sind spezielle Fälle von (zeitgesteuertem) Warten:
Sleeping: specifically waiting in Thread.sleep().
Park: specifically waiting in sun.misc.Unsafe.park() (presumably via LockSupport).
(Das Mapping erfolgt in ThreadMXBeanDataManager.java.)
Eine kurze (und nicht maßgebliche) Erörterung des Java-Thread-Status finden Sie hier hier.
BEARBEITET ZUM HINZUFÜGEN:
Es ist auch erwähnenswert, dass Threads, die Aufrufe nativer Methoden blockieren, in der JVM als angezeigt werden RUNNABLEund werden daher von VisualVM als gemeldet Running (und 100% CPU verbraucht).
Dies sollte die richtige Antwort sein. Die Frage bezog sich auf JVisualVM-Thread-Zustände, nicht auf die JVM-Thread-Zustände.
– digitale_unendlichkeit
9. Juni 2020 um 9:20 Uhr
Können Sie die Referenz hinzufügen, in der Sie die Informationen über die Blockierung von Threads in Aufrufen nativer Methoden gefunden haben?