如何为线程组设置UncaughtExceptionHandler

时间:2017-09-14 19:12:16

标签: java multithreading threadgroup

假设我有5个线程属于一个名为" Fruits-group"的线程组。

如何一次性将UncaughtExceptionHandler分配给Fruits-group的所有主题?

我知道我们可以为所有线程定义全局UncaughtExceptionHandler。 我要找的是为整个线程组分配UncaughtExceptionHandler

1 个答案:

答案 0 :(得分:2)

TL; DR ThreadGroup进行子类化并覆盖uncaughtException()方法。

ThreadGroup UncaughtExceptionHandler,实施uncaughtException(Thread t, Throwable e)方法:

  

当此线程组中的线程因未捕获的异常而停止时,由Java虚拟机调用,并且该线程没有安装特定的Thread.UncaughtExceptionHandler。

     

uncaughtException的{​​{1}}方法执行以下操作:

     
      
  • 如果此线程组具有父线程组,则使用相同的两个参数调用该父线程的ThreadGroup方法。
  •   
  • 否则,此方法检查是否安装了默认的未捕获异常处理程序,如果是,则使用相同的两个参数调用其uncaughtException方法。
  •   
  • 否则,此方法确定uncaughtException参数是否为Throwable的实例。如果是这样,没有什么特别的。否则,将使用ThreadDeath的{​​{1}}方法将包含线程名称(从线程的getName方法返回)和堆栈回溯的消息打印到标准错误流。
  •   
     

应用程序可以在Throwable的子类中覆盖此方法,以提供对未捕获异常的替代处理。

<强>更新

如果您希望能够为printStackTrace 设置 ThreadGroup,则可以创建委派子类:

UncaughtExceptionHandler

但是,一般情况下,直接在子类中实现异常处理逻辑可能会更好,但这样,您可以使用现有的ThreadGroup实现。