首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何为线程组设置UncaughtExceptionHandler

如何为线程组设置UncaughtExceptionHandler
EN

Stack Overflow用户
提问于 2017-09-14 19:12:16
回答 1查看 1.7K关注 0票数 3

假设我有5个线程属于一个线程组,名为“”。

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-14 19:19:43

TL;博士对ThreadGroup进行子类化,并重写uncaughtException()方法。

ThreadGroup是一个UncaughtExceptionHandler,实现了uncaughtException(Thread t, Throwable e)方法:

当这个线程组中的一个线程由于一个不明确的异常而停止时,当该线程没有安装特定的Thread.UncaughtExceptionHandler时,由Java调用。 uncaughtException方法ThreadGroup执行以下操作:

  • 如果此线程组具有父线程组,则将使用相同的两个参数调用该父线程组的uncaughtException方法。
  • 否则,此方法将检查是否安装了默认的未捕获异常处理程序,如果存在,则使用相同的两个参数调用其uncaughtException方法。
  • 否则,此方法将确定Throwable参数是否为ThreadDeath的实例。如果是这样的话,就不会做什么特别的事情。否则,从线程的getName方法返回的包含线程名称的消息和使用ThrowableprintStackTrace方法返回的堆栈反向跟踪将被打印到标准错误流中。

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

更新

如果您希望能够为该UncaughtExceptionHandler设置一个ThreadGroup,您可以创建一个委托子类:

代码语言:javascript
复制
public class ExceptionHandlingThreadGroup extends ThreadGroup {
    private UncaughtExceptionHandler uncaughtExceptionHandler;
    
    public ExceptionHandlingThreadGroup(String name) {
        super(name);
    }
    public ExceptionHandlingThreadGroup(ThreadGroup parent, String name) {
        super(parent, name);
    }
    
    public UncaughtExceptionHandler getUncaughtExceptionHandler() {
        return this.uncaughtExceptionHandler;
    }
    public void setUncaughtExceptionHandler(UncaughtExceptionHandler uncaughtExceptionHandler) {
        this.uncaughtExceptionHandler = uncaughtExceptionHandler;
    }
    
    @Override
    public void uncaughtException(Thread t, Throwable e) {
        if (this.uncaughtExceptionHandler != null)
            this.uncaughtExceptionHandler.uncaughtException(t, e);
        else
            super.uncaughtException(t, e);
    }
}

不过,通常情况下,最好直接在子类中实现异常处理逻辑,但是这样,您可以使用现有的UncaughtExceptionHandler实现。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46226650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档