Maison >Java >javaDidacticiel >Comment arrêter gracieusement les threads en Java à l'aide de « Thread.interrupt() » ?

Comment arrêter gracieusement les threads en Java à l'aide de « Thread.interrupt() » ?

Susan Sarandon
Susan Sarandonoriginal
2024-12-30 13:53:10132parcourir

How to Gracefully Stop Threads in Java Using `Thread.interrupt()`?

Comment arrêter efficacement les threads en Java

Introduction

La terminaison des threads en Java est cruciale pour une exécution et des ressources gracieuses du programme gestion. Alors que la méthode obsolète .stop() était couramment utilisée dans le passé, elle a été remplacée par des approches plus fiables. Cet article explique comment arrêter correctement les threads à l'aide de Thread.interrupt().

Arrêter un thread avec Thread.interrupt()

La méthode préférée pour arrêter un thread dans Java doit utiliser Thread.interrupt(). Cette méthode "réveille" un thread en veille ou interrompt un appel de blocage interruptible, tel que Thread.sleep() ou des opérations d'E/S.

Implémentation de la méthode Interrupt()

  1. Vérifier les interruptions : Dans la méthode run() du thread, vérifiez périodiquement si Thread.currentThread().isInterrupted() renvoie true.
  2. Gérer l'interruption : Si True, arrêtez gracieusement l'exécution du thread, en effectuant toutes les tâches de nettoyage nécessaires avant de revenir.
  3. Exemple de code :
public class IndexProcessor implements Runnable {
    ...

    @Override
    public void run() {
        boolean run = true;
        while (run) {
            try {
                ...
            } catch (InterruptedException e) {
                // Handle interruption
                run = false;
            }
        }
    }
}

Fermeture Descendre un fil de discussion depuis l'extérieur

Pour arrêter un fil de discussion depuis l'extérieur de sa méthode run(), suivez les étapes suivantes :

  1. Obtenez une référence au fil de discussion : Stockez une référence au fil de discussion lors de sa création.
  2. Interrompre le fil de discussion : Plus tard, lorsque vous souhaitez arrêter le fil de discussion thread, appelez sa méthode interruption().
  3. Exemple de code :
public class SearchEngineContextListener implements ServletContextListener {
    ...

    private Thread thread;

    ...

    @Override
    public void contextDestroyed(ServletContextEvent event) {
        ...
        if (thread != null) {
            thread.interrupt();
        }
    }
}

Avantages de l'utilisation de Thread.interrupt()

  • Notification immédiate : Réveille les fils de discussion et les interruptions endormis opérations de blocage.
  • Nettoyage gracieux : Permet au thread d'effectuer le nettoyage nécessaire avant la fin.
  • Évitement des exceptions : Contrairement à .stop(), interrompu() ne lève pas d'exceptions par défaut.

Conclusion

L'utilisation de Thread.interrupt() fournit un moyen robuste et efficace d'arrêter les threads en Java, garantissant une exécution gracieuse du programme et une gestion des ressources. En implémentant cette méthode dans vos threads et en gérant les interruptions en conséquence, vous pouvez contrôler la terminaison des threads et éviter les exceptions inutiles.

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