zoukankan      html  css  js  c++  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

  • 相关阅读:
    TCP定时器 之 重传/延迟ACK/保活 定时器初始化
    指针03-指针和字符串
    指针02
    指针01
    switch语句分析
    结构体分析
    参数、返回值、局部变量、数组分析
    多维数组分析
    循环语句分析
    if语句分析
  • 原文地址:https://www.cnblogs.com/softidea/p/3865965.html
Copyright © 2011-2022 走看看