Maison > Java > javaDidacticiel > le corps du texte

Comment arrêter en toute sécurité un thread Java sans utiliser « Thread.stop() » ?

Mary-Kate Olsen
Libérer: 2024-11-22 09:27:11
original
755 Les gens l'ont consulté

How to Safely Stop a Java Thread Without Using `Thread.stop()`?

Comment tuer un thread efficacement sans utiliser la méthode obsolète Thread.stop()

La classe Java Thread fournit la méthode stop() comme moyen de terminer un thread, mais il est obsolète et ne doit pas être utilisé. Cet article présente une approche alternative pour terminer un thread à l'aide de la méthode d'interruption.

Utiliser l'interruption pour arrêter un thread

Au lieu d'appeler directement stop(), ce qui n'est pas sûr et peut provoquer une corruption des données, nous pouvons utiliser une interruption pour signaler au thread qu'il doit se terminer correctement. Voici comment cela fonctionne :

public class InterruptedExceptionExample {

    private static volatile boolean shutdown = false;

    public static void main(String[] args) {
        Thread thread = new Thread(() -> {
            while (!shutdown) {
                try {
                    System.out.println("Running...");
                    Thread.sleep(5000);
                } catch (InterruptedException e) {
                    Thread.currentThread().interrupt();
                }
            }
        });

        thread.start();
        System.out.println("Press enter to quit");
        try {
            System.in.read();
        } catch (IOException e) {
            e.printStackTrace();
        }

        shutdown = true;
        thread.interrupt();
    }
}
Copier après la connexion

Dans ce code :

  1. Nous créons un fil qui s'exécute indéfiniment en boucle, en imprimant "Running..." toutes les 5 secondes.
  2. Nous avons un indicateur booléen statique (arrêt) initialisé à false, qui sera utilisé pour signaler au thread de stop.
  3. La méthode run() du thread vérifie régulièrement l'indicateur d'arrêt. S'il est défini sur true, le thread quitte la boucle.
  4. La méthode main() crée le thread, le démarre, puis attend la saisie de l'utilisateur pour définir l'indicateur d'arrêt sur true.
  5. Enfin, le fil de discussion se termine gracieusement à l'aide d'interruption().

Avantages de l'utilisation Interruption :

L'interruption d'un thread offre plusieurs avantages par rapport au stop() obsolète :

  • Résiliation gracieuse : Le thread interrompu a une chance de se nettoyer utilisez toutes les ressources ou effectuez toutes les tâches nécessaires avant de quitter.
  • Lancement d'exception : Interruption amène certaines méthodes, comme sleep() et wait(), à lever des exceptions InterruptedException. Les threads bien écrits peuvent détecter ces exceptions pour gérer l'interruption.
  • Sûr et robuste : Contrairement à stop(), qui peut provoquer une corruption des données, l'interruption est un moyen plus sûr et plus fiable de terminer un fil de discussion.

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