Java-Beispiele - Thread-Zustand abrufen
Im Lebenszyklus eines Java-Threads besitzt die Klasse Thread einen Enumerationstyp State, der mehrere Thread-Zustände definiert, nämlich:
- Neu
- Ausführbar
- Blockiert
- Wartend
- Zeitlich begrenzt wartend
- Beendet
Beschreibung der einzelnen Zustände:
1. Anfangszustand - NEW
Deklaration:
public static final Thread.State NEW
Durch Implementieren des Runnable-Interface und Erweitern von Thread kann eine Thread-Klasse erzeugt werden. Wenn eine Instanz mit new erzeugt wird, geht der Thread in den Anfangszustand über.
2. RUNNABLE
Deklaration:
public static final Thread.State RUNNABLE
2.1. Bereit-Zustand
Der Bereit-Zustand bedeutet einfach, dass man lauffähig ist. Wenn der Scheduler einen nicht auswählt, verbleibt man immer im Bereit-Zustand.
Der Aufruf der start()-Methode des Threads versetzt den Thread in den Bereit-Zustand.
Wenn die sleep()-Methode des aktuellen Threads endet, ein join() eines anderen Threads endet, das Warten auf Benutzereingaben abgeschlossen ist oder ein Thread den Objekt-Lock erhält, gehen diese Threads ebenfalls in den Bereit-Zustand über.
Wenn der aktuelle Thread seine Zeitscheibe aufgebraucht hat oder die yield()-Methode für den aktuellen Thread aufgerufen wird, geht der aktuelle Thread in den Bereit-Zustand über.
Nachdem ein Thread im Lock-Pool den Objekt-Lock erhalten hat, geht er in den Bereit-Zustand über.
2.2. Laufender Zustand
Der Zustand, in dem sich ein Thread befindet, wenn der Thread-Scheduler ihn aus dem Pool der ausführbaren Threads als aktuellen Thread auswählt. Dies ist auch der einzige Weg, wie ein Thread in den laufenden Zustand eintritt.
3. Blockierter Zustand - BLOCKED
Deklaration:
public static final Thread.State BLOCKED
Der blockierte Zustand ist der Zustand, wenn ein Thread blockiert wird, während er eine Methode oder einen Codeblock betritt, der durch das Schlüsselwort synchronized modifiziert wurde (Erwerb einer Sperre).
4. Warten - WAITING
Deklaration:
public static final Thread.State WAITING
Threads in diesem Zustand wird keine CPU-Ausführungszeit zugewiesen. Sie müssen warten, bis sie explizit aufgeweckt werden, andernfalls befinden sie sich in einem Zustand des unbegrenzten Wartens.
5. Zeitgesteuertes Warten - TIMED_WAITING
Deklaration:
public static final Thread.State TIMED_WAITING
Threads in diesem Zustand wird keine CPU-Ausführungszeit zugewiesen, aber sie müssen nicht unbegrenzt warten, um von anderen Threads explizit aufgeweckt zu werden; nach einer bestimmten Zeit werden sie automatisch aufgeweckt.
6. Beendeter Zustand - TERMINATED
Deklaration:
public static final Thread.State TERMINATED
Wenn die run()-Methode eines Threads abgeschlossen ist oder die main()-Methode des Hauptthreads abgeschlossen ist, betrachten wir ihn als beendet. Das Thread-Objekt kann noch am Leben sein, aber es ist kein separater ausführender Thread mehr. Sobald ein Thread beendet ist, kann er nicht wiederbelebt werden.
Der Aufruf der start()-Methode auf einem beendeten Thread löst eine java.lang.IllegalThreadStateException aus.
Das folgende Beispiel zeigt, wie man den Zustand eines Threads abruft:
Main.java-Datei
Die Ausgabe des obigen Codes ist:
State of thread1 after creating it - NEW State of thread1 after calling .start() method on it - RUNNABLE State of thread2 after creating it - NEW State of thread2 after calling .start() method on it - RUNNABLE State of thread2 after calling .sleep() method on it - TIMED_WAITING State of thread1 while it called join() method on thread2 -WAITING State of thread2 when it has finished it's execution - TERMINATEDAndere Erweiterungen
Java-Beispiele