在 Java 中捕获线程中的异常
在多线程应用程序中,管理不同线程中抛出的异常可能是一个挑战。考虑一个场景,主类启动一个新线程并尝试捕获它生成的任何运行时异常。
// 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"); } }
在此代码中,主线程使用 join() 等待子线程完成方法。然而,当子线程抛出异常时,主线程不会捕获它。
线程的未捕获异常处理程序
为了解决这个问题,Java 提供了 Thread .UncaughtExceptionHandler 接口。通过实现这个接口并将其分配给一个线程,您可以处理该线程中抛出的未捕获的异常。
// 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"); } }
在这个修改后的代码中:
以上是Java中如何捕获线程抛出的异常?的详细内容。更多信息请关注PHP中文网其他相关文章!