Les threads Java peuvent être créés ou détruits, les threads ont donc un cycle de vie, et le cycle de vie d'un thread peut être décrit par les six états du thread.
D'après le code source de la classe Thread, on peut voir qu'il existe 6 états de threads :
Ces six états Ce sont :
1. Nouveau : Etat initial, le thread est créé et start() n'est pas appelé.
2. Runnable : État d'exécution. Les threads Java appellent les deux états "prêt" et "en cours d'exécution" dans le système d'exploitation.
3. Bloqué : bloqué, le thread entre dans l'état d'attente et le thread abandonne le droit d'utiliser le processeur pour une raison quelconque.
Plusieurs situations de blocage :
A. En attente de blocage : Le thread en cours d'exécution exécute wait(), et la JVM mettra le thread actuel dans la file d'attente.
B. Blocage synchrone : lorsque le thread en cours d'exécution acquiert le verrou de synchronisation de l'objet, si le verrou de synchronisation est occupé par d'autres threads, la JVM placera le thread actuel dans le pool de verrouillage.
C. Autre blocage : lorsque le thread en cours d'exécution exécute sleep(), join() ou émet une requête IO, la JVM place le thread actuel à l'état de blocage. Lorsque sleep() est terminé, la jointure. () le thread se termine, le thread reprend une fois le traitement des E/S terminé.
4. En attente : État d'attente.
5. timed_waiting : état d'attente d'expiration, retour automatique après l'expiration du délai.
6. terminé : statut de terminaison, le thread actuel a terminé son exécution.
Conversion entre les six états d'un thread :
Lorsqu'un thread est instancié, il entre d'abord dans l'état initial, c'est-à-dire l'état Nouveau à ce moment. , le thread est démarré. Il ne s'exécute pas immédiatement, mais attend que le système d'exploitation le planifie avant de s'exécuter, puis appelle start() pour entrer dans l'état d'exécution, c'est-à-dire exécutable. L'état d'exécution comprend deux états : en cours d'exécution et prêt. Les deux états peuvent être convertis l'un en l'autre selon la planification du système d'exploitation. Si la tranche de temps du thread en cours d'exécution est préemptée par le CPU, elle deviendra l'état prêt, le thread en cours d'exécution entrera dans l'état bloqué en appelant la méthode synchronisée. ou un bloc synchronisé, c'est-à-dire bloqué. Lorsque le thread Après avoir acquis le verrou, il entre dans l'état d'exécution si le thread appelle sleep(), wait().join(), Locksupported.parkUtil() et d'autres méthodes ; il entrera dans l'état d'attente (attente) ou dans l'état d'attente d'expiration, c'est-à-dire timed_waiting, lors de l'appel de notify(), notifyAll(), Locksupported.unpark() et d'autres méthodes, il entrera à nouveau dans l'état d'exécution lorsque le thread. l'exécution est terminée, elle entrera dans l'état terminé, c'est-à-dire l'état terminé.
Remarque : Locksupported est une classe d'outils fournie par JDK 1.6 Dans le package java.util.concurrent, les méthodes park et unpark qu'elle fournit sont plus flexibles que les méthodes wait et notify.
Afficher l'état du thread via la ligne de commande
Introduisez d'abord deux commandes :
1. Jps : JDK 1.5 fournit l'affichage de tous les Java actuels. La commande process pid peut être utilisée pour obtenir le pid de processus correspondant.
2. Jstack : il s'agit d'un outil de traçage de pile fourni avec la machine virtuelle Java. Il peut imprimer les informations pid de processus données et les informations de pile Java du service de débogage distant.
Étapes spécifiques :
Ouvrez un terminal ou un outil de ligne de commande, entrez la commande jps pour obtenir le pid
Entrez le pid jstack pour afficher le informations actuelles sur le processus.
Le site Web PHP chinois propose un grand nombre de tutoriels d'introduction JAVA gratuits, tout le monde est invité à apprendre !
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!