哪个java.lang.Error后代可以安全捕获?

时间:2013-10-03 19:53:04

标签: java error-handling uncaught-exception throwable uncaughtexceptionhandler

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

但是

如果我有一个多线程应用程序,通常是最佳做法,我应该有一个UncaughtExceptionHandler,如果发生RuntimeExceptionError,它会执行某些操作。我通常想做的只是记录。记录RuntimeExceptions不能真正受到伤害,这很明显。但问题出现在我身上:

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

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

1 个答案:

答案 0 :(得分:1)

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

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