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:
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!