5

Java でシャットダウン フックの実行中にキャッチされない例外がスローされた場合、jvm は登録されている残りのシャットダウン フック (存在する場合) を実行せずにすぐに終了しますか? javadoc から:

キャッチされなかった例外は、スレッドの ThreadGroup オブジェクトの uncaughtException メソッドを呼び出すことにより、他のスレッドと同様にシャットダウン フックで処理されます。このメソッドのデフォルトの実装は、例外のスタック トレースを System.err に出力し、スレッドを終了します。仮想マシンが終了または停止することはありません。

他のシャットダウンフックを実行する必要があるようです...

フォローアップの質問として、シャットダウン フックで例外をスローする可能性のあるコードを含めることは、おそらくお勧めできませんか? どうしても避けられない場合は、シャットダウン フック内で例外をキャッチすることをお勧めしますか?

4

2 に答える 2

5

addShutdownHookメソッドは Thread を受け取るため、個々のシャットダウン フックはそれぞれ独自の Thread です。キャッチされていない例外のデフォルトの動作は、エラー メッセージを出力してスレッドを終了することです。フックの動作は同じであるため、1 つのシャットダウン フックがエラーで終了しても、他のフックの実行が妨げられることはありません。

私は実際にこれをテストしていないことに注意してください...

于 2012-12-07T20:42:44.733 に答える
0

シャットダウンフック内で実行されるコードは、メインスレッドで実行されるコードと同じベストプラクティスに従います。必要に応じて例外をキャッチするか、必要に応じてログに記録するか、例外をstdoutに出力させます。

于 2012-12-07T20:35:22.950 に答える