Maison >Java >javaDidacticiel >Exemple Java - Obtenir l'état du fil

Exemple Java - Obtenir l'état du fil

黄舟
黄舟original
2017-01-20 11:22:581947parcourir

Le cycle de vie d'un thread en Java peut être grossièrement divisé en 5 états.

1. Nouvel état (Nouveau) : Un nouvel objet thread est créé.

2. État Prêt (Runnable) : Une fois l'objet thread créé, d'autres threads appellent la méthode start() de l'objet. Le thread dans cet état se trouve dans le pool de threads exécutables, devient exécutable et attend d'obtenir le droit d'utiliser le processeur.

3. État d'exécution (Running) : le thread à l'état prêt obtient le CPU et exécute le code du programme.

4. Bloqué : l'état bloqué signifie que le thread abandonne le droit d'utiliser le processeur pour une raison quelconque et arrête temporairement de fonctionner. Jusqu'à ce que le thread entre dans l'état prêt, il a une chance de passer à l'état en cours d'exécution. Il existe trois situations de blocage :

(1) En attente de blocage : le thread en cours d'exécution exécute la méthode wait() et la JVM placera le thread dans le pool d'attente.

(2) Blocage de la synchronisation : lorsque le thread en cours d'exécution acquiert le verrou de synchronisation de l'objet, si le verrou de synchronisation est occupé par un autre thread, la JVM placera le thread dans le pool de verrouillage.

(3) Autre blocage : lorsqu'un thread en cours d'exécution exécute la méthode sleep() ou join(), ou émet une requête d'E/S, la JVM mettra le thread dans un état bloqué. Lorsque l'état sleep() expire, join() attend que le thread se termine ou expire, ou que le traitement des E/S est terminé, le thread entre à nouveau dans l'état prêt.

5. État mort (Dead) : le thread a terminé l'exécution ou a quitté la méthode run() en raison d'une exception, et le thread termine son cycle de vie.

Exemple Java - Obtenir létat du fil

L'exemple suivant montre comment obtenir l'état d'un thread :

/*
 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 résultat de l'exécution du code ci-dessus est :

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

Ce qui précède est l'exemple Java - obtenir l'état du fil de discussion. Pour plus de contenu connexe, veuillez faire attention au site Web PHP chinois (www.php.cn) !


Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn