Heim  >  Artikel  >  Java  >  Java-Beispiel – Thread-Status abrufen

Java-Beispiel – Thread-Status abrufen

黄舟
黄舟Original
2017-01-20 11:22:581930Durchsuche

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.

Java-Beispiel – Thread-Status abrufen

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)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn