Heim >Java >javaLernprogramm >Wie kann ich von Threads in Java ausgelöste Ausnahmen abfangen?

Wie kann ich von Threads in Java ausgelöste Ausnahmen abfangen?

DDD
DDDOriginal
2024-12-04 00:26:10876Durchsuche

How Can I Catch Exceptions Thrown by Threads in Java?

Ausnahmen von Threads in Java abfangen

In Multithread-Anwendungen kann die Verwaltung von Ausnahmen, die in verschiedenen Threads ausgelöst werden, eine Herausforderung sein. Stellen Sie sich ein Szenario vor, in dem eine Hauptklasse einen neuen Thread initiiert und versucht, alle von ihr generierten Laufzeitausnahmen abzufangen.

// 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");
    }
}

In diesem Code wartet der Hauptthread mithilfe von join() auf den Abschluss des untergeordneten Threads. Verfahren. Wenn der untergeordnete Thread jedoch eine Ausnahme auslöst, wird sie vom Hauptthread nicht abgefangen.

Nicht erfasster Ausnahmehandler für Threads

Um dieses Problem zu beheben, stellt Java einen Thread bereit .UncaughtExceptionHandler-Schnittstelle. Indem Sie diese Schnittstelle implementieren und einem Thread zuweisen, können Sie nicht abgefangene Ausnahmen verarbeiten, die innerhalb dieses Threads ausgelöst werden.

// 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");
    }
}

In diesem geänderten Code:

  1. Wir erstellen eine neue Instanz von ein UncaughtExceptionHandler.
  2. Wir weisen den UncaughtExceptionHandler dem untergeordneten Thread zu, indem wir setUncaughtExceptionHandler() verwenden. Methode.
  3. Wenn eine nicht abgefangene Ausnahme innerhalb des untergeordneten Threads auftritt, wird die uncaughtException()-Methode unseres Handlers aufgerufen, sodass wir die Ausnahme ordnungsgemäß behandeln können.

Das obige ist der detaillierte Inhalt vonWie kann ich von Threads in Java ausgelöste Ausnahmen abfangen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn