サブスレッドの例外をプライマリ・スレッドでキャプチャする方法

1436 ワード

1つ目:サブスレッドクラス
public class ThreadExceptionRunner implements Runnable {
    @Override
    public void run() {
        throw new RuntimeException(
                "error!"
        );
    }
}

第2歩:メインスレッドクラスは一番後ろに私がカスタマイズした2つのclassが配置として使われており、説明があります.
public class DemoThread {
    public static void main(String[] args) {

            Thread thread = new Thread(new ThreadExceptionRunner());
            thread.start();
        System.out.println("=================================");

        //3: Executors.newCachedThreadPool ,   , , 
        ExecutorService exec = Executors.newCachedThreadPool(new HandleThreadFactory());
        exec.execute(new ThreadExceptionRunner());
        exec.shutdown();
    }

}
//1:     Thread.UccaugthExceptionHandler
//   
class MyUncaughtExceptionHandle implements Thread.UncaughtExceptionHandler
{

    @Override
    public void uncaughtException(Thread t, Throwable e) {
        System.out.println("zidingyi"+e);
    }
}
//2:     ThradFactory   
class HandleThreadFactory implements ThreadFactory{

    @Override
    public Thread newThread(Runnable r) {
        System.out.println("create thread t");
        Thread thread=new Thread(r);
        System.out.println("set uncaughtException for t");
        thread.setUncaughtExceptionHandler(new MyUncaughtExceptionHandle());
        return thread;
    }
}