我一直在尝试理解java中的异常处理程序并经历了大量文章,但最终却更加困惑。我理解一个帖子可能有其特定的ExceptionHandler(threadObject.setExceptionHandler())
,应该先检查。如果它没有任何代码,则threadGroup为checked(threadObject.getThreadgroup().uncaughtException(Thread t, Throwable e))
。
最后,它查找默认的异常处理程序。现在有两件事令我困惑:
如果DefaultExceptionHandlers是全局范围的,为什么代码中没有处理异常?
public class JoinThreads {
private volatile static int count;
@SuppressWarnings("static-access")
public static void main(String[] args) throws InterruptedException {
// TODO Auto-generated method stub
Thread t1 = new Thread(new Runnable(){
public void run(){
System.out.println("Thread 1 "+count);
}
});
Thread t2 = new Thread(new Runnable(){
public void run(){
System.out.println("Thread 2");
throw new NullPointerException();
}
});
Thread.currentThread().setPriority(Thread.MAX_PRIORITY);
t1.start();
t2.start();
t2.setDefaultUncaughtExceptionHandler(new Thread.UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
// TODO Auto-generated method stub
System.out.println("Handler 2 "+Thread.currentThread().getName()+" "+e.getMessage());
}
});
}
}
我希望UncaughtExceptionHandler能够解决这个问题,但线程已经终止并且代码永远不会被执行
编辑: - 是设置ExceptionHandler解决问题后设置启动方法。谢谢。但是,我想问一些相关的事情。在每个线程的基础上使用DefaultExceptionHandler的含义是什么?如果我为threadObj2声明它,它如何覆盖threadObj 1?