Latest web development tutorials

Java Beispiele - Get Threadzustand

Java Beispiele Java Beispiele

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.

006

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

Java Beispiele Java Beispiele