如果我在线程上调用run()
方法并且run()
方法会抛出未捕获的异常会产生什么结果?
谁抓住了例外? Exception 是否被捕获?
答案 0 :(得分:9)
如果为ThreadGroup安装了异常处理程序,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());
答案 1 :(得分:1)
如果您已将Runnable提交给ExecutorService,则可以捕获包含在ExecutionException内的异常。 (强烈推荐简单地调用run())
答案 2 :(得分:0)
如果您将其分配给实施ThreadGroup方法的 uncaughtException(Thread, Throwable),则可以。