2

对我来说绝对清楚,通常 Java 程序不应该 catch Throwable,因为它正在捕捉Error-s like OutOfMemoryError。100% 清楚。

但。

如果我有一个多线程应用程序,通常最好的做法是,我应该有一个UncaughtExceptionHandler,如果RuntimeExceptionError发生的话,它会做一些事情。我通常想做的就是简单地记录。记录RuntimeExceptions不会真正伤害,这很清楚。但问题出现在我身上:

我可以在 UncaughtExceptionHandler 中捕获并安全地记录哪些错误,如果我记录它,它不会处理我的整个应用程序?存在哪些错误,这并不意味着应用程序必须立即停止?

例如,如果我得到一个OutOfMemoryError,我只会要求一个printStackTrace标准输出,因为记录它的内存需要可能会杀死其他线程。但是StackOverflowError在我看来,被记录是完全安全的,因为它简单地意味着当前线程的堆栈区域已满。记录它是安全的。你会记录哪些其他Error后代?

4

1 回答 1

1

如果你能用它做一些建设性的事情,任何 Throwable 都是安全的。任何你不能做有用的事情的 Throwable 都不应该被抓住。

顺便说一句:为了捕获所有日志记录,catch(Throwable)当我知道剩余的代码会丢弃 Throwable/Error/Exception 时,我出于日志记录的目的。

于 2013-10-03T19:56:08.573 回答