Latest web development tutorials

Exemples Java - Obtenir l'état de fil

Des exemples Java Des exemples Java

fils de Java dans le cycle de vie peuvent être divisés en cinq états.

  • 1. Créez un nouvel état (Nouveau): crée un nouvel objet de fil.
  • 2. état prêt (Runnable): Une fois l'objet thread est créé, l'autre thread appelle la méthode start () de l'objet. L'état du fil threads exécutables dans la piscine se trouve, est devenu runnable, en attendant d'acquérir le droit d'utiliser le CPU.
  • 3. Run Status (Running): fil d'état prêt obtient un CPU, l'exécution du code de programme.
  • 4. Blocked (Bloqué): le fil est bloqué pour une raison d'abandonner le droit d'utiliser CPU temporairement cesse de courir. Jusqu'à ce que le fil dans l'état prêt, une chance d'aller courir. Case bloqué trois catégories:
    • exécution de la méthode fil d'attente run (), JVM sera le fil dans la piscine d'attente: (A), en attente de blocage.
    • (B), blocage synchrone: threads pour obtenir l'objet de verrouillage de synchronisation, si le verrou de synchronisation est occupé par un autre thread, la JVM se verrouillent dans le pool de threads.
    • Méthode fil conducteur exécution sleep () ou rejoindre (), ou d'émettre la demande d'E / S, JVM régler le thread est bloqué: (C) Autre bloqué. Lorsque le délai d'attente sleep (), join () attend pour un thread se termine ou fois sur, ou I / traitement de O est terminée, le fil dans l'état prêt à nouveau.
  • 5. état de mort (mort): exécution du thread en raison de anormale sur ou hors de la méthode run (), l'extrémité du fil du cycle de vie.

006

L'exemple suivant montre comment obtenir l'état du fil:

/*
 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() );
   }
}

Le code ci-dessus est exécuté sortie est:

……
alive
alive
alive
MyThread #1 结束。
alive
alive
alive
alive
alive
alive
alive
MyThread #1 存活:false 状态:TERMINATED

Des exemples Java Des exemples Java