Maison > Java > javaDidacticiel > le corps du texte

Comment terminer en toute sécurité un thread en Java sans utiliser « stop() » ?

Patricia Arquette
Libérer: 2024-11-23 19:18:16
original
787 Les gens l'ont consulté

How to Safely Terminate a Thread in Java Without Using `stop()`?

Comment terminer un fil de discussion sans utiliser stop()

L'utilisation de la méthode stop() pour terminer un fil de discussion peut conduire à un comportement imprévisible. Cet article présente une approche alternative à la terminaison du thread par interruption.

Alternative à stop()

Contrairement à stop(), l'interruption signale au thread de terminer son exécution en douceur. L'interruption est obtenue via la méthode Thread.interrupt(). Lorsqu'un thread est interrompu, il lèvera une InterruptedException.

Exemple d'implémentation

Considérez le code suivant :

public class HelloWorld {

    public static void main(String[] args) throws Exception {
        Thread thread = new Thread(new Runnable() {

            public void run() {
                try {
                    while (!Thread.currentThread().isInterrupted()) {
                        Thread.sleep(5000);
                        System.out.println("Hello World!");
                    }
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
        });
        thread.start();
        System.out.println("press enter to quit");
        System.in.read();
        thread.interrupt();
    }
}
Copier après la connexion

Dans cet exemple, le fil est créé et démarré comme d'habitude. Lorsque l'utilisateur appuie sur Entrée, le thread principal interrompt le thread de travail à l'aide de thread.interrupt(). Le thread de travail gère l'interruption en lançant une exception InterruptedException, puis en effaçant l'indicateur d'interruption. Étant donné que le thread vérifie l'interruption dans une boucle, il finira par terminer son exécution après avoir terminé l'itération en cours.

Considérations

  • L'interruption peut provoquer des méthodes telles que sleep() et wait() pour lancer InterruptedException.
  • Il est recommandé de vérifier l'interruption à l'aide de Thread.currentThread().isInterrupted() dans un boucle pour garantir que le thread coopère avec la demande d'interruption.
  • Dans certains cas, il peut être nécessaire de définir l'indicateur d'interruption sur le thread actuel à l'aide de Thread.currentThread().interrupt() dans le bloc catch.

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal