In diesem Tutorial geht es darum, welche Zustände ein Thread im Laufe seines Lebens durchläuft.
- "ready" und "running"
Nach dem Start wird der Thread in den Zustand ready versetzt. In diesem Zustand wartet er darauf, dass ihm der Threadscheduler die CPU zuteilt. Geschieht dies, so geht er in den Zustand running über. Diese beiden Zustände heißen auch aktive Threadzustände (active). Während ein Thread seine Methode run() abarbeitet, wird er
in der Regel vom Threadscheduler mehrmals zwischen den Zuständen running und ready hin- und hergeschaltet. Er kann auch mit Hilfe der Methode yield() von selbst anbieten, vom running-Status in den ready-Status zu wechseln. Ob dieses tatsächlich
geschieht, entscheidet der Threadscheduler.
- "dead"
Wenn ein Thread seine Methode run() abgearbeitet hat, so kommt er in den Zustand dead. Diesen Zustand kann er nicht mehr verlassen. Dieser Modus kann auch mit Hilfe der unsicheren Methode stop() erreicht werden. Die Methode stop() ist deprecated und soll nicht mehr verwendet werden. Man beendet einen Thread also sauber, indem
man seine run()-Methode auslaufen lässt.
- "sleeping"
Der Zustand sleeping kann nur durch die statische Methode sleep() erreicht werden. Diese Methode versetzt den laufenden Thread für die angegebene Zeit in diesen Zustand. Danach geht er wieder in den Zustand ready über. Wird für einen schlafenden Thread die Methode interrupt() aufgerufen, so geht er vor Ablauf der Zeit in den Zustand ready über. Die Methode sleep() erzeugt dann eine InterruptedException.
- "blocked"
Ein Thread, der mit Datenein-/ausgabe beschäftigt ist muss in der Regel auf nicht bereite I/O-Geräte warten. In diesem Fall wird er vom Threadscheduler in den Zusatnd blocked versetzt. Er kommt erst dann wieder in den Zustand ready, wenn die Daten bereitstehen
oder geschrieben wurden. Außerdem kann sich ein Thread mit Hilfe der Methode join() auch selbst in diesen Zustand versetzen. Er wartet dann, bis jener Thread, für den er die Methode join() aufgerufen hat, den Zusatnd dead erreicht hat.
- "suspended"
Dieser Zustand wurde nicht in die Grafik aufgenommen. Er kann durch die unsicheren Methoden suspend() und resume() erreicht bzw. verlassen werden. Diese Methoden sind deprecated und sollen nicht mehr verwendet werden.