package org.anicloud.concurrency; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.ThreadFactory; /** * Created by zhaoyu on 15-4-9. */ class ExceptionThread2 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("caught " + 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 CaptureUncaughtException { public static void main(String[] args) { // set default exception handler // Thread.setDefaultUncaughtExceptionHandler(new MyUncaughtExceptionHandler()); ExecutorService executorService = Executors.newCachedThreadPool(new HandlerThreadFactory()); executorService.execute(new ExceptionThread2()); } }
Java 多线程异常捕捉
猜你喜欢
转载自tramp-zzy.iteye.com/blog/2200509
今日推荐
周排行