如果我在线程上调用 run()
方法并且 run()
方法抛出一个未捕获的异常,结果会是什么?
谁捕获了这个异常? Exception 甚至会被捕获吗?
最佳答案
如果为线程组安装了异常处理程序,JVM 会将异常传递给它。如果它是 AWT 线程,您可以为未处理的异常安装事件处理程序。否则 JVM 会处理它。
带有自定义处理程序的线程组示例以及如何使用它:
public class MyThreadGroup extends ThreadGroup {
public MyThreadGroup() {
super("My Thread Group");
}
public void uncaughtException(Thread t, Throwable ex) {
// Handle exception
}
}
Thread t = new Thread(new MyThreadGroup(), "My Thread") { ... };
t.start();
使用 AWT 异常处理程序的示例:
public class MyExceptionHandler {
public void handle(Throwable ex) {
// Handle exception
}
public void handle(Thread t, Throwable ex) {
// Handle exception
}
}
System.setProperty("sun.awt.exception.handler", MyExceptionHandler.class.getName());
关于java - 当线程抛出异常时会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1193210/