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

Exemple Java - Obtenir l'état du fil

黄舟
Libérer: 2017-01-20 11:22:58
original
1949 Les gens l'ont consulté

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() );
   }}
Copier après la connexion

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
Copier après la connexion

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


Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal