Heim >Java >javaLernprogramm >Java-Beispiel – Thread-Status abrufen
Der Lebenszyklus eines Threads in Java kann grob in 5 Zustände unterteilt werden.
1. Neuer Zustand (Neu): Ein neues Thread-Objekt wird erstellt.
2. Bereitzustand (ausführbar): Nachdem das Thread-Objekt erstellt wurde, rufen andere Threads die start()-Methode des Objekts auf. Der Thread in diesem Zustand befindet sich im ausführbaren Thread-Pool, wird ausführbar und wartet darauf, das Recht zur Nutzung der CPU zu erhalten.
3. Laufzustand (Running): Der Thread im Bereitschaftszustand erhält die CPU und führt den Programmcode aus.
4. Blockiert: Der blockierte Zustand bedeutet, dass der Thread aus irgendeinem Grund das Recht zur Nutzung der CPU aufgibt und vorübergehend nicht mehr ausgeführt wird. Bis der Thread in den Bereitschaftszustand wechselt, besteht die Möglichkeit, in den Ausführungszustand zu wechseln. Es gibt drei Blockierungssituationen:
(1) Warten auf Blockierung: Der laufende Thread führt die Methode wait() aus und die JVM stellt den Thread in den Wartepool.
(2) Synchronisationsblockierung: Wenn der laufende Thread die Synchronisationssperre des Objekts erhält und die Synchronisationssperre von einem anderen Thread belegt ist, stellt die JVM den Thread in den Sperrpool.
(3) Andere Blockierung: Wenn ein laufender Thread die Methode „sleep()“ oder „join()“ ausführt oder eine E/A-Anfrage ausgibt, versetzt die JVM den Thread in einen blockierten Zustand. Wenn der Zustand „sleep()“ abläuft, wartet „join()“ auf die Beendigung oder Zeitüberschreitung des Threads oder auf den Abschluss der E/A-Verarbeitung, und der Thread wechselt wieder in den Bereitschaftszustand.
5. Dead-Zustand (Dead): Der Thread hat die Ausführung der run()-Methode aufgrund einer Ausnahme beendet und der Thread beendet seinen Lebenszyklus.
Das folgende Beispiel zeigt, wie man den Status eines Threads erhält:
/* 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() ); }}
Das Ausgabeergebnis der Ausführung des obigen Codes ist:
……alive alive aliveMyThread #1 结束。alive alive alive alive alive alive aliveMyThread #1 存活:false 状态:TERMINATED
Das Obige ist das Java-Beispiel – Abrufen des Thread-Status. Weitere verwandte Inhalte finden Sie auf der chinesischen PHP-Website (www.php.cn)!