Maison >Java >javaDidacticiel >Comment arrêter en toute sécurité et gracieusement un thread Java ?

Comment arrêter en toute sécurité et gracieusement un thread Java ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-12-01 22:28:09560parcourir

How to Safely and Gracefully Stop a Java Thread?

Comment arrêter un thread Java en toute sécurité et gracieusement

Lorsque vous travaillez avec le multithreading en Java, il peut arriver que vous deviez mettre fin à un thread prématurément. Pour garantir une bonne exécution et éviter l’instabilité du système, il est crucial d’arrêter les threads « en douceur ». Cela implique de permettre au thread d'effectuer toutes les opérations critiques avant de terminer son exécution.

Problème :

Vous avez créé un thread dont l'exécution prend trop de temps. . Bien qu'il semble inachevé, vous souhaitez arrêter le fil de façon gracieuse.

Solution :

L'approche privilégiée pour y parvenir consiste à exploiter une variable booléenne dans le fil de discussion cible. méthode run(). Définir cet indicateur sur true de l’extérieur signalera au thread de se terminer correctement. Voici un exemple :

class MyThread extends Thread {

    volatile boolean finished = false;

    public void stopMe() {
        finished = true;
    }

    @Override
    public void run() {
        while (!finished) {
            // Perform tasks
        }
    }
}

Évitez la méthode stop() :

Dans le passé, une méthode Thread.stop() existait, mais son utilisation est fortement découragé. Selon la documentation Java, cette méthode "déverrouille tous les moniteurs qu'elle a verrouillés" lors de l'exécution, entraînant une incohérence potentielle des données et un comportement arbitraire.

Par conséquent, l'utilisation d'un indicateur booléen comme illustré ci-dessus garantit une sécurité et un comportement arbitraires. mécanisme de terminaison de fil contrôlé.

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