Java-Threads können erstellt oder zerstört werden, sodass Threads einen Lebenszyklus haben und der Lebenszyklus eines Threads durch die sechs Zustände des Threads beschrieben werden kann.
Aus dem Quellcode der Thread-Klasse können wir ersehen, dass es 6 Zustände von Threads gibt:
Diese sechs Zustände sind:
1. Neu: Anfangszustand, der Thread ist erstellt und start() wird nicht aufgerufen.
2. Lauffähiger Zustand: Java-Threads bezeichnen zusammenfassend die beiden Zustände „Bereit“ und „Laufend“ im Betriebssystem.
3. Blockiert: Blockiert, der Thread wechselt in den Wartezustand und gibt aus irgendeinem Grund das Recht auf, die CPU zu verwenden.
Mehrere Blockierungssituationen:
A. Warten auf Blockierung: Der laufende Thread führt wait() aus und die JVM stellt den aktuellen Thread in die Warteschlange.
B. Synchrones Blockieren: Wenn der laufende Thread die Synchronisationssperre des Objekts erhält und die Synchronisationssperre von anderen Threads belegt ist, stellt die JVM den aktuellen Thread in den Sperrpool.
C. Andere Blockierung: Wenn der laufende Thread „sleep()“ oder „join()“ ausführt oder eine E/A-Anfrage ausgibt, versetzt die JVM den aktuellen Thread in den Blockierungsstatus () Der Thread wird beendet. Der Thread wird wieder aufgenommen, nachdem die E/A-Verarbeitung abgeschlossen ist.
4. Warten: Wartezustand.
5. timed_waiting: Timeout-Wartezustand, der nach Timeout automatisch zurückkehrt.
6. beendet: Beendigungsstatus, der aktuelle Thread hat die Ausführung abgeschlossen.
Konvertierung zwischen den sechs Zuständen eines Threads:
Wenn ein Thread instanziiert wird, wechselt er zunächst in den Anfangszustand, also in den Neuzustand , der Thread wird gestartet. Er wird nicht sofort ausgeführt, sondern wartet, bis das Betriebssystem ihn vor der Ausführung plant, und ruft dann start() auf, um in den Ausführungsstatus zu gelangen, d. h. ausführbar. Der Ausführungsstatus umfasst zwei Zustände: ausgeführt und bereit. Die beiden Zustände können gemäß der Planung des Betriebssystems ineinander umgewandelt werden. Wenn die Zeitscheibe des laufenden Threads von der CPU vorbelegt wird, wechselt der laufende Thread durch Aufrufen der synchronisierten Methode in den blockierten Zustand oder synchronisierter Block, d. h. blockiert. Wenn der Thread nach dem Erwerb der Sperre Sleep(), Wait().join(), Locksupported.parkUtil() und andere Methoden aufruft, Beim erneuten Aufrufen von notify(), notifyAll(), Locksupported.unpark() und anderen Methoden wird der Thread erneut in den Wartezustand (Warten) oder Timeout-Wartezustand versetzt Wenn die Ausführung abgeschlossen ist, wechselt sie in den beendeten Zustand, dh in den beendeten Zustand.
Hinweis: Locksupported ist eine von JDK 1.6 bereitgestellte Toolklasse. Im Paket java.util.concurrent sind die bereitgestellten Park- und Unpark-Methoden flexibler als die Wait- und Notify-Methoden.
Thread-Status über die Befehlszeile anzeigen
Führen Sie zunächst zwei Befehle ein:
1. Jps: JDK 1.5 bietet die Anzeige aller aktuellen Java The Mit dem Befehl „process pid“ können Sie die entsprechende Prozess-pid abrufen.
2. Jstack: Es handelt sich um ein Stack-Tracing-Tool, das mit der Java Virtual Machine geliefert wird. Es kann die angegebenen Prozess-PID-Informationen und die Java-Stack-Informationen des Remote-Debugging-Dienstes ausdrucken.
Spezifische Schritte:
Öffnen Sie ein Terminal oder ein Befehlszeilentool und geben Sie den Befehl jps ein, um die PID abzurufen.
Geben Sie jstack pid ein, um die PID anzuzeigen aktuelle Prozessinformationen.
Die chinesische PHP-Website bietet eine große Anzahl kostenloser JAVA-Einführungs-Tutorials, zum Lernen ist jeder herzlich willkommen!
Das obige ist der detaillierte Inhalt vonWas sind die Zustände von Java-Threads?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!