Java Beispiele - Get Threadzustand
Java-Threads im Lebenszyklus lassen sich in fünf Staaten aufgeteilt werden.
- 1. Erstellen Sie einen neuen Zustand (neu): erzeugt einen neuen Thread-Objekt.
- 2. Bereitschaftszustand (Runnable): Nachdem der Thread-Objekt erstellt wird, ruft der andere Thread die start () -Methode des Objekts. Der Zustand des Gewindes runnable Threads im Pool befindet, hat runnable werden, wartet das Recht zu erwerben, um die CPU zu verwenden.
- 3. Führen Sie Status (Running): Bereitschaftszustand Thread bekommt eine CPU, die Code-Programm ausgeführt wird.
- 4. blocked (Blocked): Der Faden wird aus irgendeinem Grund blockiert das Recht aufgeben CPU zu verwenden, vorübergehend aussetzt. Bis zum Gewinde in den Bereitschaftszustand, eine Chance, laufen zu gehen. Fall blockiert drei Kategorien:
- (A), wartet für die Sperrung: Ausführung Wartethread run () -Methode, JVM wird der Thread in den Wartepool.
- (B), synchrone Sperrung: threads in Erhalten des Objekts von Synchronisationssperre ausgeführt wird, wenn die Synchronisationssperre von einem anderen Thread belegt ist, verriegeln die JVM wird in den Thread-Pool.
- (C) Andere blockiert: laufenden Thread Ausführung sleep () oder join () Methode, oder geben Sie den E / A-Anforderung wird JVM gesetzt der Thread blockiert wird. Wenn der Schlaf () Timeout, join () wartet auf einen Faden oder eine Zeitüberschreitung beendet wird, oder I / O-Verarbeitung abgeschlossen ist, den Faden wieder in den Bereitschaftszustand.
- 5. Todeszustand (tot): Thread-Ausführung aufgrund abnormaler über die oder aus der Methode run (), das Gewindeende des Lebenszyklus.
Das folgende Beispiel zeigt, wie Sie den Zustand des Fadens zu erhalten:
/* author by w3cschool.cc Main.java */ class MyThread extends Thread{ boolean waiting= true; boolean ready= false; MyThread() { } public void run() { String thrdName = Thread.currentThread().getName(); System.out.println(thrdName + " 启动"); while(waiting) System.out.println("等待:"+waiting); System.out.println("等待..."); startWait(); try { Thread.sleep(1000); } catch(Exception exc) { System.out.println(thrdName + " 中断。"); } System.out.println(thrdName + " 结束。"); } synchronized void startWait() { try { while(!ready) wait(); } catch(InterruptedException exc) { System.out.println("wait() 中断。"); } } synchronized void notice() { ready = true; notify(); } } public class Main { public static void main(String args[]) throws Exception{ MyThread thrd = new MyThread(); thrd.setName("MyThread #1"); showThreadStatus(thrd); thrd.start(); Thread.sleep(50); showThreadStatus(thrd); thrd.waiting = false; Thread.sleep(50); showThreadStatus(thrd); thrd.notice(); Thread.sleep(50); showThreadStatus(thrd); while(thrd.isAlive()) System.out.println("alive"); showThreadStatus(thrd); } static void showThreadStatus(Thread thrd) { System.out.println(thrd.getName()+" 存活:" +thrd.isAlive()+" 状态:" + thrd.getState() ); } }
Der obige Code ausgeführt wird, ausgegeben wird:
…… alive alive alive MyThread #1 结束。 alive alive alive alive alive alive alive MyThread #1 存活:false 状态:TERMINATED