首页 > 代码库 > 捕获Java线程池执行任务抛出的异常

捕获Java线程池执行任务抛出的异常

捕获Java线程池执行任务抛出的异常
Java中线程执行的任务接口java.lang.Runnable 要求不抛出Checked异常,
  public interface Runnable {
  public abstract void run();

  }
  那么如果 run() 方法中抛出了RuntimeException,将会怎么处理了?
  通常java.lang.Thread对象运行设置一个默认的异常处理方法:
  java.lang.Thread.setDefaultUncaughtExceptionHandler(UncaughtExceptionHandler)
   而这个默认的静态全局的异常捕获方法时输出堆栈。
  当然,我们可以覆盖此默认实现,只需要一个自定义的java.lang.Thread.UncaughtExceptionHandler接口实现即可。
  public interface UncaughtExceptionHandler {
  void uncaughtException(Thread t, Throwable e);
  }

  而在线程池中却比较特殊。默认情况下,线程池 java.util.concurrent.ThreadPoolExecutor 会Catch住所有异常, 当任务执行完成(java.util.concurrent.ExecutorService.submit(Callable))获取其结果 时(java.util.concurrent.Future.get())会抛出此RuntimeException。

 

 

http://blog.sina.com.cn/s/blog_8839cbea0101f5wa.html