Un fil traverse de nombreuses phases dans son cycle de vie. Par exemple, un fil vient au monde, démarre, court, puis disparaît. Le diagramme suivant explique le cycle de vie complet du fil.
Commencez votre cours de développement de logiciels libres
Développement Web, langages de programmation, tests de logiciels et autres
Un thread est défini au niveau du système d'exploitation. Et le langage Java, ainsi que tous les autres langages, utilise le service fourni par le système d'exploitation. Du point de vue du développeur, un thread est un ensemble d’instructions que nous allons écrire notre application et exécuter d’une certaine manière. Une application elle-même peut être composée de plusieurs threads. Différents threads peuvent être exécutés en même temps. La JVM (Java Virtual Machine) fonctionne avec plusieurs threads. Il existe des threads pour le garbage collection. Il existe des fils de discussion pour le compilateur Just in Time et d'autres fils de discussion techniques.
Vous trouverez ci-dessous les différents états du cycle de vie des threads en Java :
1. Nouveau : Un nouveau thread commence son cycle de vie à l'intérieur du nouvel état. Il continue à être dans cet état avant que le programme ne commence le thread. De plus, il est connu sous le nom de fil de discussion créé.
2. Exécutable : Une fois qu'un fil de discussion récemment né peut démarrer, le fil devient exécutable. Un thread avec cet état est considéré comme exécutant son processus.
3. En attente : Parfois, un thread passe à l'état d'attente autour de l'état même si le thread attend qu'un autre thread exécute une activité. Un thread passe à l'état exécutable uniquement si un thread supplémentaire indique que le thread en attente doit continuer à fonctionner.
4. Attente chronométrée : Un thread exécutable peut facilement attendre que l'état obtienne un intervalle de temps spécifique. Un thread avec cet état passe à l'état exécutable une fois cet intervalle de points expiré ou si l'événement qu'il attend réellement se produit.
5. Terminé : Un thread exécutable passe à l'état terminé car il accomplit sa tâche ou se termine.
La manière la plus simple de créer un thread en Java est d'utiliser le modèle Runnable. Tout d’abord, vous devez créer une instance de l’interface Runnable, ce qui est très simple ; il n'y a qu'une seule méthode à mettre en œuvre. Ensuite, nous transmettons cette instance au constructeur de la classe Thread. Et puis, nous appelons simplement la méthode start() de cet objet thread créé pour lancer un nouveau thread qui va exécuter la tâche enveloppée dans notre objet Runnable.
Alors d’abord, nous créons une instance d’un Runnable. Il n’y a qu’une seule méthode à implémenter, appelée méthode run(). Il s'agit du modèle Java 7 pour ce faire, avec une instance d'une classe anonyme. Mais on peut aussi utiliser une expression lambda pour implémenter un Runnable puisqu'il n'y a qu'une seule méthode dans l'interface Runnable.
Créons des fils de discussion sur des exemples très simples.
Nous allons voir ce qui peut mal se passer avec une condition de concurrence avec un code non synchronisé qui devrait être synchronisé, et nous allons corriger notre code en utilisant la synchronisation. Ce premier exemple est très simple ; c'est très basique. Il s'agit simplement de créer une tâche.
Sortie :
Une tâche est une instance de l'interface Runnable, appelons-la exécutable, et nous pouvons implémenter cette interface à l'aide d'une expression lambda. Cette tâche est confiée à un nouveau thread et exécutée dans le contexte de ce thread. Nous allons donc simplement imprimer le nom du thread qui exécute cette tâche. Je cours dans… Thread.currentThread() est une méthode statique de la classe Thread qui renvoie le thread exécutant la tâche en cours. Et il suffit d'appeler getName() sur cet objet thread pour renvoyer le nom d'un thread, puis après avoir créé une instance de Thread t = new Thread. Passer ce runnable en tant que paramètre. Ce fil va donc exécuter ce morceau de code. Et de le lancer. t.start() c'est la méthode start() que nous devons appeler. On peut également donner un nom explicite à ce Thread en utilisant t.setName("Mon thread"). Et maintenant nous pouvons exécuter ce code. Maintenant, au lieu d'appeler la méthode start(), nous appelons la méthode run(), et si nous exécutons ce code, le problème est que la tâche est correctement exécutée, mais elle n'est pas exécutée dans le thread que nous avons créé. Il est exécuté dans le thread principal, qui est le thread exécutant la méthode principale. Cette méthode run() ne doit donc pas être appelée si l'on souhaite lancer un nouveau thread.
Sortie :
Les méthodes décrites par simplement Thread sont présentées dans le tableau.
|
Noms des méthodes de thread |
||||||||||||||||||||||||
Chaîne |
Renvoyer le nom de ce fil |
||||||||||||||||||||||||
int |
|
||||||||||||||||||||||||
booléen | isAlive() Test si ce fil est toujours en cours d'exécution | ||||||||||||||||||||||||
vide | joindre() Attend que ce fil meure (se termine) | ||||||||||||||||||||||||
vide | run() Chaque fois que ce fil a été construit à l'aide d'un objet Runnable individuel, que la méthode d'exécution de l'objet Runnable est généralement appelée, cette méthode ne fera rien et retournera. Chaque fois que la classe de thread peut être étendue et que la méthode run() est remplacée pendant la sous-classe, une méthode run() remplacée est appelée. | ||||||||||||||||||||||||
vide | setName(Nom de la chaîne) Modifie le nom de ce fil pour qu'il devienne comparable au nom de l'argument. | ||||||||||||||||||||||||
vide statique | sommeil(millis longs) lancements interrompus/exception Cela provoque le repos du thread en cours d'exécution pendant la quantité requise de millisecondes. |
||||||||||||||||||||||||
vide statique | sleep(long millis, int Nanos) lance InterruptedException Cela provoque la mise en veille (cessation de l'exécution) du thread en cours d'exécution pendant la quantité requise de millisecondes ainsi que la quantité particulière de nanosecondes. | ||||||||||||||||||||||||
vide | début() Déclenche ces threads pour démarrer l'exécution ; la machine virtuelle Java appelle la méthode d'exécution de ce thread. | ||||||||||||||||||||||||
vide statique | rendement() Déclenche la pause de l'objet thread actuel et permet à des threads supplémentaires de s'exécuter brièvement. | ||||||||||||||||||||||||
thème statique | currentThread() Renvoie une mention de l'objet thread en cours d'exécution. |
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!