Maison  >  Article  >  Java  >  Comment démarrer, arrêter et redémarrer gracieusement des threads en Java ?

Comment démarrer, arrêter et redémarrer gracieusement des threads en Java ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-31 11:37:29624parcourir

How to Gracefully Start, Stop, and Restart Threads in Java?

Cycle de vie des threads en Java : démarrer, arrêter, redémarrer

La gestion des threads est cruciale pour la concurrence en Java. Dans cet article, nous abordons l'énigme du démarrage, de l'arrêt et du redémarrage d'un fil.

Démarrer un fil

Instancier une classe Runnable ou Callable et la transmettre à un L'objet Thread est la manière conventionnelle de démarrer un fil de discussion.

Arrêter un fil de discussion

Malgré les idées fausses courantes, arrêter brusquement un fil de discussion n'est pas recommandé. Au lieu de cela, signalez au thread de se terminer correctement :

  1. Définissez une variable booléenne volatile pour indiquer l'état de terminaison souhaité (isTerminating).
  2. Vérifiez isTerminating périodiquement dans la méthode d'exécution du thread.
  3. Lorsque isTerminating est vrai, arrêtez l'exécution du thread.

Redémarrage d'un thread

Une fois qu'un thread s'arrête, il ne peut pas être directement redémarré. Cependant, envisagez ces options :

  • Créer un nouveau fil de discussion : Terminez le fil de discussion existant et créez-en un nouveau avec la même tâche.
  • Suspendre /Reprendre le fil : Au lieu d'arrêter le fil, suspendez-le. Lorsqu'il doit reprendre, informez-le pour poursuivre l'exécution. Cela garantit que le fil de discussion reste actif et évite les frais généraux liés à la création et à la destruction de fils de discussion à plusieurs reprises.

Exemple de terminaison d'un fil de discussion :

public class Task implements Runnable {

    private volatile boolean isTerminating;

    @Override
    public void run() {
        while (!isTerminating) {
            // Perform task
        }
        System.out.println("Thread terminated.");
    }

    public void setIsTerminating(boolean terminating) {
        this.isTerminating = terminating;
    }
}

Dans l'ensemble Par exemple, appelez setIsTerminating(true) et join() pour attendre que le thread se termine correctement.

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