Przykłady Java - Get stan wątku
Nici Java w cyklu życia można podzielić na pięć państw.
- 1. Utwórz nowy stan (Nowe): tworzy nowy obiekt gwintu.
- 2. Stan gotowości (Runnable): Po utworzeniu obiektu nici, inny wątek wywołuje metodę start () obiektu. Stan wątku runnable wątków w puli znajduje się, stała runnable, czekając do nabycia prawa do korzystania z CPU.
- 3. Stan Run (Bieg): gotowa Stan wątku dostaje procesora, wykonywanie kodu programu.
- 4. zatkany (Zablokowane): wątek jest zablokowany z jakiegoś powodu porzucenia prawo do użycia CPU czasowo przestanie działać. Do wątku do stanu gotowości, możliwość pobiegać. Sprawa zablokowane trzy kategorie:
- (A), czekając na blokowanie: wykonanie run wątek wait () metoda, JVM będzie nitka do basenu oczekiwania.
- (B), synchroniczne blokujące: wątki działające w uzyskaniu przedmiotu blokady synchronizacji, jeśli blokada synchronizacji jest zajęty przez inny wątek, JVM zablokuje do puli wątków.
- Sposób wykonania uśpienia działa wątku () lub join () lub wydać żądanie I / O, JVM ustawi wątek jest zablokowany: (C) Inne blokowane. Gdy sleep () limit czasu, join () czeka na wątek kończy lub limit czasu lub przetwarzanie we / wy jest zakończona, wątek w stan gotowości ponownie.
- 5. Stan śmierci (martwe): wykonanie wątku z powodu nieprawidłowego ponad lub poza metody run () na końcu gwintu cyklu życia.
Poniższy przykład pokazuje, w jaki sposób uzyskać stan wątku:
/* 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() ); } }
Powyższy kod jest uruchamiany wyjście jest:
…… alive alive alive MyThread #1 结束。 alive alive alive alive alive alive alive MyThread #1 存活:false 状态:TERMINATED