您的位置:首页 > 其它

Thread.UnCaughtExceptionHandler接口,为每一个Thread对象创建一个异常处理器

2015-10-17 12:11 471 查看
import java.util.concurrent.ExecutorService;

import java.util.concurrent.Executors;

import java.util.concurrent.ThreadFactory;

/*

* 通过修改Executor生产线程的方法,Java SE5中一个新接口为Thread.UnCaughtExceptionHandler

* 这个接口允许你在每个Thread对象上都附着一个异常处理器

* 为了使用它,我们将创建一个ThreadFactory,

* 这样为每一个创建的Thread对象附着一个throw new RuntimeException();

* **/

class ExceptionThread2 implements Runnable{

@Override
public void run() {
Thread t = Thread.currentThread();
System.out.println("run() by "+t);
System.out.println("en = "+t.getUncaughtExceptionHandler());
throw new RuntimeException();
}


}

class MyUncaughtExceptionHandler implements Thread.UncaughtExceptionHandler{

@Override
public void uncaughtException(Thread t, Throwable e) {
System.out.println("caught "+e);
}


}

class HandlerThreadFactory implements ThreadFactory{

@Override
public Thread newThread(Runnable r) {
// TODO Auto-generated method stub
System.out.println(this + "creating new thread");
Thread t = new Thread(r);
System.out.println("created "+t);
t.setUncaughtExceptionHandler(new MyUncaughtExceptionHandler());
System.out.println("en = "+t.getUncaughtExceptionHandler());
return t;
}


}

public class CaptureUncaughtException {

public static void main(String[] args){
ExecutorService exec = Executors.newCachedThreadPool(new HandlerThreadFactory());
exec.execute(new ExceptionThread2());
}


}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: