class ExceptionThread implements Runnable{
@Override
public void run() {
Thread t=Thread.currentThread();
System.out.println(" run by "+t);
System.out.println(" eh = "+t.getUncaughtExceptionHandler());
throw new RuntimeException();
}
}
class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler{
@Override
public void uncaughtException(Thread t, Throwable e) {
System.out.println(t.getName()+"---->"+e);
}
}
class HandlerThreadFactory implements ThreadFactory{
@Override
public Thread newThread(Runnable r) {
System.out.println(this+" creating new Thread");
Thread thread=new Thread(r);
System.out.println(" created "+thread);
thread.setUncaughtExceptionHandler(new MyUncaughtExceptionHandler());
System.out.println(" eh="+thread.getUncaughtExceptionHandler());
return thread;
}
}
public class ThreadExceptionTest {
public static void main(String[] args) {
Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler());
ExecutorService service=Executors.newCachedThreadPool(new HandlerThreadFactory());
service.execute(new ExceptionThread());
}
}