Tout d'abord, laissez-moi vous dire que les 5 états mentionnés sur Internet sont trompeurs. Les threads en Java ont en réalité 6 états. Le terme « 5 états » désigne en fait l’état du processus initial.
Statut précoce du processus :
Le soi-disant "processusstatut" fait ici référence au statut précoce du "processus à thread unique".
Pour le "processus multithread" désormais courant, cela n'a évidemment aucun sens de parler de "statut du processus". Nous devrions parler de "l'état d'un thread sous le processus" ou directement ". état du fil". Cependant, parfois « état du processus » et « état du thread » sont encore confondus.
Certains systèmes appellent les threads des « processus légers », nous parlons donc toujours de « statut du processus ».
Parfois, ils ne sont même pas appelés « processus » ou « thread », ils sont appelés « tâche » ou « travail ».
Différences par rapport à l'état d'exécution traditionnel
Certaines personnes pensent souvent que l'état d'exécution est absent de l'état du thread Java. Cela confond en fait deux niveaux d'états différents. . Pour l'état du thread Java, il n'y a pas d'état dit d'exécution, et son état exécutable inclut l'état d'exécution.
Nous pouvons nous demander pourquoi n'y a-t-il aucune distinction entre ces deux états dans la JVM ?
L'architecture actuelle du système d'exploitation time-sharing (partage du temps) multi-tâches (multi-tâches) utilise généralement ce que l'on appelle "temps La méthode slicing (time quantum ou time slice)" est utilisée pour effectuer une planification circulaire préemptive (préemptive) (style round-robin).
Cette tranche de temps est généralement très petite. Un thread ne peut s'exécuter sur le processeur que pendant au plus 10 à 20 ms à la fois (il est en cours d'exécution), ce qui ne dure qu'environ 0,01 seconde après le processus. une tranche de temps est utilisée, elle sera désactivée et placée à la fin de la file d'attente de planification pour attendre une nouvelle planification. (C'est-à-dire revenir à l'état prêt)
Habituellement, l'état du thread Java est destiné à la surveillance. Si le thread change si rapidement, cela n'a pas beaucoup de sens de faire la distinction entre prêt et en cours d'exécution.
Les implémentations JVM traditionnelles d'aujourd'hui mappent les threads Java aux threads sous-jacents du système d'exploitation un par un et confient la planification au système d'exploitation. L'état que nous voyons au niveau de la machine virtuelle est essentiellement un mappage du sous-jacent. état et emballage. La JVM elle-même n'effectue aucune planification substantielle et cela n'a pas beaucoup de sens de mapper les états sous-jacents prêts et en cours d'exécution. C'est donc un bon choix de les unifier en états exécutables.
Voici les mots dans les commentaires dans le code source de Thread.State :
Ces états sont des états de machines virtuelles qui ne reflètent pas tous les états de thread du système d’exploitation.
Ces états sont des états de machines virtuelles qui ne reflètent les états des threads du système d'exploitation.
Remarques sur l'état RUNABLE :
Un thread à l'état exécutable est en cours d'exécution dans la machine virtuelle Java mais il attend peut-être d'autres ressources du système d'exploitation telles que processeur.
Un thread à l'état exécutable est en cours d'exécution dans la machine virtuelle Java, mais il attend peut-être d'autres ressources du système d'exploitation, telles que le processeur.
L'état RUNNABLE en Java inclut en fait les états Prêt et En cours d'exécution, vous pouvez donc ignorer complètement les déclarations inexactes sur Internet. La réponse à ces questions se trouve souvent dans le code source et la javadoc.
Statut parmi 6 :
NEW (nouveau)
RUNNABLE (exécutable)
BLOCKED (bloqué)
WAITING (attente infinie)
TIMED_WAITING (temps d'attente limité)
TERMINATED(termination)
Articles associés :
Instance Java - obtention du statut du thread
Partage de plusieurs statuts dans le thread Java
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!