プログラムで addShutDownHook を使用すると、おかしな動作をしますか?
3 に答える
addShutDownHook は、jvm シャットダウン シーケンスが開始されたときにのみ jvm によって実行される新しい Runnable(thread) を追加するだけです。のコードは通常のコードと同じように実行されますが、前述の特殊なケースでのみ実行されます。通常、クリーンアップまたはロギングの目的で使用されます
書かれたコードを再チェックして、期待どおりに「論理的に」配置されていることを確認してください。
Java でのシグナル処理 (特に Windows では、ドキュメントはまだ 100% 明確ではありません) ref
シグナルが送信されると、シグナルハンドラがトリガーされます。シグナルはアプリケーションをシャットダウンする必要はなく、アプリケーションがシャットダウンされた場合、シグナル ハンドラが呼び出されない可能性があります。
Unix、ilnux、windows などのさまざまなプラットフォーム (OS) で現在アクティブなプロセスからのさまざまなシグナルを処理できる SignalHandler の handle メソッドにロジックを実装できます。SignalHandler のロジックは、シグナル名とタイムスタンプを stdout のようにして、特別なシグナル タイプを受信したときにプロセスをログに記録またはシャットダウンすることができます。
addShutDownHook を使用すると、スレッドの終了順序を設定するだけで、スレッドの終了シーケンスは、JVM がシャットダウンを開始したときにのみトリガーされます。
リソースまたはネットワーク接続を解放するためにスレッドで addShutDownHook このメソッドをよく使用します。また、SignalHandler && Signal を使用して、このプロセスがアクティブな時間にサーバー プロセスがどこから何を受信したかを監視します。