Latest web development tutorials

Przykłady Java - Get stan wątku

Przykłady Java Przykłady Java

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.

006

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

Przykłady Java Przykłady Java