关于线程捕捉异常的问题
class ExceptionThread2 implements Runnable{
@Override
public void run() {
// TODO Auto-generated method stub
Thread t=Thread. currentThread();
System. out.println("线程正在运行");
throw new RuntimeException();
}
}
class MyUncaughtException implements Thread.UncaughtExceptionHandler{
@Override
public void uncaughtException(Thread t, Throwable e) {
System. out.println("异常捕获到了");
}
}
class HandlerThreadFactory implements ThreadFactory{
@Override
public Thread newThread(Runnable r) {
System. out.println("线程工厂");
Thread t= new Thread(r );
t.setUncaughtExceptionHandler( new MyUncaughtException());
return t ;
}
}
public class CaptrueUncaughtException {
public static void main(String args[]){
ExecutorService exec = Executors.newCachedThreadPool(new HandlerThreadFactory());
exec.execute(new ExceptionThread2());
}
}
以上部分是我根据《java编程思想》写的demo,按道理来讲输出的应该是
线程工厂
线程正在运行
异常捕获到了
而且书上也是这么讲的。
但是我实际上运行的结果却是
线程工厂
线程正在运行
线程工厂
异常捕获到了
也就是说线程工厂里的newThread方法又运行了一次,实在想不明白为何会这样。请指教!