Maison > Java > javaDidacticiel > Comment puis-je tuer un thread en toute sécurité en Java sans utiliser « stop() » ?

Comment puis-je tuer un thread en toute sécurité en Java sans utiliser « stop() » ?

Susan Sarandon
Libérer: 2024-11-29 15:01:10
original
850 Les gens l'ont consulté

How Can I Safely Kill a Thread in Java Without Using `stop()`?

Tuer un fil sans utiliser stop()

Dans la programmation multithread, il peut devenir nécessaire de terminer un fil. Bien que la méthode stop() offre une solution abrupte, son utilisation est déconseillée en raison de fuites potentielles de ressources. Cet article examine une méthode alternative pour terminer un thread : l'interruption.

Utilisation de l'interruption

La méthode d'interruption signale à un thread de terminer normalement son exécution. Lorsqu'il est appelé, le thread vérifie son état d'interruption et renvoie une InterruptedException si c'est vrai. Cette exception peut être interceptée et gérée dans la méthode d'exécution du thread, lui permettant de nettoyer les ressources et de se terminer correctement.

Voici un exemple d'utilisation de l'interruption :

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

Considérations

  • L'interruption d'un thread amène sleep() et wait() à lancer immédiatement InterruptedException, empêchant une durée indéfinie blocage.
  • Le thread arrêté doit coopérer en vérifiant l'état interrompu et en interceptant les InterruptedExceptions pour quitter la boucle d'exécution.
  • Définir une interruption sur le thread actuel dans le bloc catch est une bonne pratique, mais peut être inutile dans les cas simples.

Code posté

Le code posté présente plusieurs problèmes :

  • Le thread actuel est référencé dans une variable d'instance, ce qui peut ne pas refléter avec précision le thread en cours d'exécution.
  • La vérification de la vivacité du thread renvoie toujours vrai, tandis que l'interruption est effacée l'indicateur d'interruption et est appelé inutilement.

En conclusion, l'utilisation de l'interruption fournit une approche plus contrôlée de la terminaison des threads, garantissant que les ressources sont correctement nettoyées. Cependant, cela nécessite la coopération du fil à arrêter.

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