3

将已检查的异常直接扔给 UncaughtExceptionHandler 有什么负面影响?

        Thread t = new Thread() {

            @Override
            public void run() {
                try {
                    verb();
                } catch (Exception e) {
                    getUncaughtExceptionHandler().uncaughtException(this,e);
                }
            }
        };

显然,对应用程序有(应该是)后果 - 编写 verb() 的人认为应该处理这个特定条件。假设我愿意忽略这一点,还会出现什么问题?

在线程即将终止之前调用 ExceptionHandler 是否有后果?

4

1 回答 1

1

不应该有负序列。
如果您没有明确设置自定义处理程序,ThreadGroup则将调用方法:

此方法确定 Throwable 参数是否是 ThreadDeath 的实例。如果是这样,没有什么特别的。否则,一条包含线程名称的消息(从线程的 getName 方法返回)和使用 Throwable 的 printStackTrace 方法的堆栈回溯将打印到标准错误流。

如果您设置了自定义,最有可能的是它只会记录一些东西。因此,您只会看到线程日志和堆栈跟踪。
除非您的自定义处理程序做了一些特定的事情,这些事情只有在线程终止时才应该完成,但从 OP 看来情况并非如此。

于 2013-04-03T20:12:19.153 回答