默认情况下,不能捕获线程中逃逸的异常,一但异常逃出run方法,就会向外传播到控制台,J2SE 5以后,可以使用Executor来解决这个问题。 Thread类有一个setUncaughtExceptionHandler方法,可以设置未捕获异常的处理方法。利用ThreadFactory,我们可以给所有使用线程池管理的线程添加处理方法。
package com.test;
import java.lang.Thread.UncaughtExceptionHandler;
import java.util.concurrent.ThreadFactory;
public class TFactory implements ThreadFactory {
@Override
public Thread newThread(Runnable r) {
// TODO 自动生成的方法存根
Thread t=new Thread(r);
t.setUncaughtExceptionHandler(new UncaughtExceptionHandler() {
@Override
public void uncaughtException(Thread t, Throwable e) {
// TODO 自动生成的方法存根
System.out.println("caught "+e);
}
});
return t;
}
}
线程池中使用:
package com.test;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class Main {
public static void main(String[] args) {
ExecutorService exec=Executors.newCachedThreadPool(new TFactory());
exec.execute(new Runnable() {
@Override
public void run() {
// TODO 自动生成的方法存根
throw new IllegalArgumentException();
}
});
exec.shutdown();
}
}