小编典典

Java未捕获的所有线程的全局异常处理程序

java

我问一个有关如何覆盖默认的Java异常处理问题,被告知的答案在这里

现在的问题是:是否有一种方法可以将该处理程序泛化为所有线程,而无需在每个线程中明确声明?

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


阅读 221

收藏
2020-11-23

共1个答案

小编典典

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

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

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


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

除非您想更改线程的非默认处理程序,否则这不是必需的。如果确实需要这样做,则可以遍历应用程序的ThreadGroup层次结构来查找所有线程。(除非您的应用被沙盒化了…)

编辑

使用以下答案可以找到正在运行的应用程序的线程列表:

Set<Thread> threadSet = Thread.getAllStackTraces().keySet();
2020-11-23