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