Esempi Java - Get State filo
thread Java del ciclo di vita possono essere suddivisi in cinque stati.
- 1. Creare un nuovo stato (Nuovo): crea un nuovo oggetto thread.
- 2. stato di pronto (Runnable): Dopo aver creato l'oggetto thread, l'altro thread chiama il metodo start () dell'oggetto. Lo stato del filo thread eseguibili in piscina si trova, è diventato eseguibile, in attesa di acquisire il diritto di utilizzare la CPU.
- 3. Eseguire Stato (Running): filo stato di pronto ottiene una CPU, l'esecuzione del codice di programma.
- 4. bloccati (bloccato): il thread è bloccato per qualche motivo a rinunciare al diritto di utilizzare CPU interrompe temporaneamente l'esecuzione. Fino a quando il filo nello stato pronto, la possibilità di andare a correre. Caso bloccato tre categorie:
- metodo di esecuzione run attesa filo (), JVM sarà il filo nella piscina di attesa: (A), in attesa di blocco.
- (B), il blocco sincrono: thread in esecuzione per ottenere l'oggetto del blocco di sincronizzazione, se il blocco di sincronizzazione è occupato da un altro thread, la JVM si blocca nel pool di thread.
- Metodo filo conduttore esecuzione sleep () o partecipare (), o emettere la richiesta di I / O, JVM imposterà il thread è bloccato: (C) Altro bloccato. Quando il sonno () timeout, join () attende per un thread termina o scade, o I / O di elaborazione è completata, il filo nello stato di nuovo pronto.
- 5. la morte dello stato (guasto): l'esecuzione del filo a causa di anomale sopra o fuori del metodo run (), l'estremità del filo del ciclo di vita.
L'esempio seguente mostra come ottenere lo stato del filo:
/* 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() ); } }
Il codice di cui sopra viene eseguito in uscita è:
…… alive alive alive MyThread #1 结束。 alive alive alive alive alive alive alive MyThread #1 存活:false 状态:TERMINATED