サブスレッドの例外をプライマリ・スレッドでキャプチャする方法
1436 ワード
1つ目:サブスレッドクラス
第2歩:メインスレッドクラスは一番後ろに私がカスタマイズした2つのclassが配置として使われており、説明があります.
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;
}
}