对我来说绝对清楚,通常Java程序不应该捕获Throwable
,因为它正在捕获Error
- 如OutOfMemoryError
。 100%清除。
但是
如果我有一个多线程应用程序,通常是最佳做法,我应该有一个UncaughtExceptionHandler
,如果发生RuntimeException
或Error
,它会执行某些操作。我通常想做的只是记录。记录RuntimeExceptions
不能真正受到伤害,这很明显。但问题出现在我身上:
我可以捕获哪些错误并安全地记录在UncaughtExceptionHandler中,如果我记录它,它将不会处理我的整个应用程序?哪些错误,并不意味着应用程序必须立即停止?
例如,如果我得到OutOfMemoryError
,我只会要求printStackTrace
标准输出,因为记录它的内存需要可以杀死其他线程。但是 StackOverflowError
在我看来完全安全,因为它意味着当前线程的堆栈区域已满。记录它是安全的。 您会记录哪些其他Error
个后代?
答案 0 :(得分:1)
如果你能用它做一些有建设性的事情,那么任何Throwable都是安全的。任何你不能做有用事情的Throwable都不应该被抓住。
BTW:为了捕获所有日志记录,当我知道剩余的代码会丢弃Throwable / Error / Exception时,我catch(Throwable)
用于记录目的。