Maison  >  Article  >  Java  >  Cycle de vie des threads en Java

Cycle de vie des threads en Java

WBOY
WBOYoriginal
2024-08-30 16:19:57509parcourir

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.

Cycle de vie des threads en Java

Commencez votre cours de développement de logiciels libres

Développement Web, langages de programmation, tests de logiciels et autres

  • Thread Constructor produit un thread via un nouvel état.
  • L'appel de start la méthode dans Thread peut passer à l'état exécutable.
  • Thread Scheduler concernant Java exécute ce thread lorsque le processeur le reçoit.
  • Lorsque le thread passe à un état bloqué, il s'exécutera à nouveau car il revient à un état exécutable.
  • Si la méthode d'attente est appelée thread, elle passe en attente de l'état, elle passera à un état exécutable peu de temps après qu'elle devienne une notification tout au long de la méthode Inform et notify all.
  • Le fil de discussion se termine une fois la méthode run terminée.

Qu'est-ce que Thread ?

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.

États du cycle de vie des threads en Java

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.

Comment créer un fil de discussion en Java ?

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.

Cycle de vie des threads en Java

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.

Cycle de vie des threads en Java

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.

Cycle de vie des threads en Java

Sortie :

Cycle de vie des threads en Java

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.

Cycle de vie des threads en Java

Sortie :

Cycle de vie des threads en Java

Méthodes de cycle de vie des threads en Java

Les méthodes décrites par simplement Thread sont présentées dans le tableau.

Data Types Thread Method Names
String

getName()

Return this thread’s name

int get priority()

Returns the thread’s priority

boolean isAlive()

Tests if this thread is still running

void join()

Waits for this thread to die (terminate)

void run()

Whenever this thread was built utilizing an individual Runnable object, which usually Runnable object’s run method is called, this method will do nothing and returns. Whenever thread class can be extended and run() method is over-ridden during sub-class, then an over-ridden run() method is called.

void setName(String name)

Alterations the name with this thread to become comparable to the argument name.

static void

 

 

sleep(long millis) throws Interrupted/Exception
It causes the presently performing thread to rest for
the required quantity of milliseconds.
static void sleep(long millis, int Nanos) throws InterruptedException

It causes the presently performing thread to sleep (cease execution) for the required quantity of milliseconds as well as the particular quantity of nanoseconds.

void start()

Triggers these threads to start execution; the Java Virtual Machine calls the run method of that thread.

static void yield()

Triggers the presently thread object to pause and permit additional threads to execute briefly.

static Thread currentThread()

Returns a mention of the presently executing thread object.

Types de données

Noms des méthodes de thread
    Chaîne

  • getName()
  • Renvoyer le nom de ce fil

  • int
  • obtenir la priorité()
  • Renvoie la priorité du fil
    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.
    Conclusion Simple pour commencer à utiliser les fils, extrêmement difficile à comprendre. Concevoir des classes contenant des méthodes pouvant être sécurisées par thread est un défi. Lire : JavaDoc pour récupérer la classe java.lang.Thread

    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!

    Déclaration:
    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
    Article précédent:Struts en JavaArticle suivant:Struts en Java