对我来说绝对清楚,通常 Java 程序不应该 catch Throwable
,因为它正在捕捉Error
-s like OutOfMemoryError
。100% 清楚。
但。
如果我有一个多线程应用程序,通常最好的做法是,我应该有一个UncaughtExceptionHandler
,如果RuntimeException
或Error
发生的话,它会做一些事情。我通常想做的就是简单地记录。记录RuntimeExceptions
不会真正伤害,这很清楚。但问题出现在我身上:
我可以在 UncaughtExceptionHandler 中捕获并安全地记录哪些错误,如果我记录它,它不会处理我的整个应用程序?存在哪些错误,这并不意味着应用程序必须立即停止?
例如,如果我得到一个OutOfMemoryError
,我只会要求一个printStackTrace
标准输出,因为记录它的内存需要可能会杀死其他线程。但是StackOverflowError
在我看来,被记录是完全安全的,因为它简单地意味着当前线程的堆栈区域已满。记录它是安全的。你会记录哪些其他Error
后代?