VisualVM – Thread-Zustände

Lesezeit: 4 Minuten

Benutzer-Avatar
Ali Schah Ahmed

Kann mir bitte jemand den Unterschied erklären zw Sleeping, Wait, Parkund Monitor Thread-Zustände in VisualVM.

Geben Sie hier die Bildbeschreibung ein

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.

Benutzer-Avatar
Maciej Cygan

Ich habe ein sehr schönes Diagramm gefunden, das so ziemlich alles beschreibt, was Sie wissen müssen / wollen.

Geben Sie hier die Bildbeschreibung ein

  1. Neu

Der Thread befindet sich im neuen Zustand, wenn Sie eine Instanz der Thread-Klasse erstellen, jedoch vor dem Aufruf der start()-Methode.

  1. 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.

  1. Betrieb

Der Thread befindet sich im laufenden Zustand, wenn der Thread-Scheduler ihn ausgewählt hat.

  1. 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)
  1. Nicht ausführbar (blockiert)

Dies ist der Zustand, in dem der Thread noch aktiv ist, aber derzeit nicht ausgeführt werden kann.

  1. 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

Benutzer-Avatar
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:

BLOCKED -> Monitor
RUNNABLE -> Running
WAITING/TIMED_WAITING -> Sleeping/Park/Wait (see below)
TERMINATED/NEW -> Zombie

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?

    – Krönz

    16. Januar 2021 um 14:33 Uhr

1270220cookie-checkVisualVM – Thread-Zustände

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy