Maison > Java > javaDidacticiel > Comment puis-je détecter les exceptions levées par les threads en Java ?

Comment puis-je détecter les exceptions levées par les threads en Java ?

DDD
Libérer: 2024-12-04 00:26:10
original
879 Les gens l'ont consulté

How Can I Catch Exceptions Thrown by Threads in Java?

Détecter les exceptions des threads en Java

Dans les applications multithread, la gestion des exceptions lancées dans différents threads peut être un défi. Considérons un scénario dans lequel une classe principale initie un nouveau thread et tente d'intercepter toutes les exceptions d'exécution générées par celui-ci.

// Original Code
public class CatchThreadException {

    public static void main(String[] args) throws InterruptedException {
        Thread t = new Thread() {
            @Override
            public void run() {
                throw new RuntimeException("Exception from thread");
            }
        };

        try {
            t.start();
            t.join();
        } catch (RuntimeException e) {
            System.out.println("** RuntimeException from main");
        }

        System.out.println("Main stopped");
    }
}
Copier après la connexion

Dans ce code, le thread principal attend que le thread enfant se termine à l'aide de join(). méthode. Cependant, lorsque le thread enfant lève une exception, le thread principal ne l'attrape pas.

Gestionnaire d'exceptions non capturées pour les threads

Pour résoudre ce problème, Java fournit un thread .Interface UncaughtExceptionHandler. En implémentant cette interface et en l'attribuant à un thread, vous pouvez gérer les exceptions non interceptées lancées dans ce thread.

// Using Uncaught Exception Handler
public class CatchThreadException {

    public static void main(String[] args) throws InterruptedException {
        Thread.UncaughtExceptionHandler h = new Thread.UncaughtExceptionHandler() {
            @Override
            public void uncaughtException(Thread th, Throwable ex) {
                System.out.println("Uncaught exception: " + ex);
            }
        };
        Thread t = new Thread() {
            @Override
            public void run() {
                throw new RuntimeException("Exception from thread");
            }
        };
        t.setUncaughtExceptionHandler(h);
        t.start();
        t.join();
        System.out.println("Main stopped");
    }
}
Copier après la connexion

Dans ce code modifié :

  1. Nous créons une nouvelle instance de un UncaughtExceptionHandler.
  2. Nous attribuons UncaughtExceptionHandler au thread enfant à l'aide de setUncaughtExceptionHandler() méthode.
  3. Lorsqu'une exception non interceptée se produit dans le thread enfant, la méthode uncaughtException() de notre gestionnaire est invoquée, nous permettant de gérer l'exception avec élégance.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal