【问题标题】:Java uncaught global exception handler for ALL threads所有线程的 Java 未捕获的全局异常处理程序
【发布时间】:2015-10-26 11:11:05
【问题描述】:

我问了一个关于如何覆盖默认 Java 异常处理 here 的问题,并被告知答案 here

现在的问题是:有没有一种方法可以将这个处理程序生成到所有线程,而无需在每个线程中显式声明?

我认为应该可以以某种方式获取所有线程,然后将它们绑定到异常处理程序?

【问题讨论】:

    标签: java exception-handling


    【解决方案1】:

    使用Thread.setDefaultUncaughtExceptionHandler。正如javadoc 所说:

    “通过设置默认的未捕获异常处理程序,应用程序可以更改那些已经接受系统任何“默认”行为的线程处理未捕获异常的方式(例如记录到特定设备或文件)提供。”

    显然,如果一个线程已经有一个(非默认)处理程序,那么它不会受到默认行为更改的影响。


    我认为应该可以以某种方式获取所有线程,然后将它们绑定到异常处理程序?

    这不是必须的……除非你想改变一个线程的非默认处理程序。如果确实需要这样做,可以通过遍历应用程序的ThreadGroup 层次结构找到所有线程。 (除非你的应用是沙盒的......)

    编辑

    可以使用this answer找到正在运行的应用程序的线程列表:

    Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
    

    【讨论】:

      【解决方案2】:

      如果我没记错的话,你可以使用Thread.setDefaultUncaughtExceptionHandler(Thread.UncaughtExceptionHandler eh)

      Thread.setDefaultUncaughtExceptionHandler

      【讨论】:

        【解决方案3】:

        Thread中有一个方法setDefaultUncaughtExceptionHandler

        【讨论】:

          猜你喜欢
          • 2013-10-25
          • 2018-06-14
          • 1970-01-01
          • 2011-07-02
          • 1970-01-01
          • 2015-01-02
          • 2011-05-20
          • 2010-12-05
          • 1970-01-01
          相关资源
          最近更新 更多