2

通常、Java プログラムは-s likeをキャッチThrowableしているため、 をキャッチすべきではないということは、私にはまったく明らかです。100%クリア。ErrorOutOfMemoryError

しかし。

マルチスレッド アプリケーションを使用している場合、通常はベストUncaughtExceptionHandlerプラクティスRuntimeExceptionですError。私が通常やりたいことは、単にログを記録することです。ロギングRuntimeExceptionsは本当に害になることはありません。それは明らかです。しかし、私の中で疑問が生じます:

UncaughtExceptionHandler で安全にキャッチしてログに記録できるエラーのうち、ログに記録するとアプリケーション全体が処理されないエラーはどれですか? アプリケーションをすぐに停止する必要があるという意味ではない、どのエラーがありますか?

たとえば、 を取得した場合、ログに記録するために必要なメモリによって他のスレッドが強制終了される可能性があるため、標準出力に をOutOfMemoryError要求するだけです。printStackTraceしかし、現在のスレッドのスタック領域がいっぱいになったことを単純に意味するため、StackOverflowErrorログに記録しても完全に安全だと思われます。ログに記録することは安全です。他にどのError子孫をログに記録しますか?

4

1 に答える 1

1

建設的な何かを行うことができれば、Throwable は安全にキャッチできます。有用なことを行うことができない Throwable は、キャッチされるべきではありません。

ところで:すべてのログをキャッチするcatch(Throwable)ために、残りのコードがThrowable/Error/Exceptionを破棄することがわかっている場合にログを記録します。

于 2013-10-03T19:56:08.573 に答える