私はJavaのアプリケーションを持っています。そこでは、誰かがコード内のコードSystem.exit()を終了した場合、メッセージのログ記録やリソースの解放などを行うためにリスナーを呼び出す必要があります...
どうすればそれを実装できますか、どんな提案/アプローチも歓迎します。
Runtime.addShutdownHook
メソッドを使用して、シャットダウンフックを追加できます。これは基本的に未起動のThread
であり、Javaのシャットダウン時に実行されます。 =仮想マシン。
ただし、これは、JVMのライフサイクルの非常にデリケートな時期に実行されるため、慎重に検討する必要がある領域です。 Runtime.addShutdownHook
メソッドのAPI仕様から:
シャットダウンフックは、仮想マシンのライフサイクルの微妙な時期に実行されるため、防御的にコーディングする必要があります。特に、スレッドセーフであり、可能な限りデッドロックを回避するように作成する必要があります。
いずれにせよ、シャットダウンフックがどのように機能するかを少し読んでください。十分な準備がなければ、シャットダウンフックにアプローチするべきではないでしょう。 Runtime.addShutdownHook
メソッドのAPI仕様を注意深くお読みください。
この回答の情報を検索して見つけたいくつかの記事は次のとおりです。
シャットダウンフック -シャットダウン時にログを記録するためにシャットダウンフックが追加される方法の小さな例を示しています。
シャットダウンフックAPIの設計 -質問と回答のスタイルでシャットダウンフックのいくつかの設計上の決定に対処します。
関数Runtime.addShutdownHook(Thread thehook)
を使用すると、フックをJava仮想マシンに登録できます。
フックは、初期化されているが開始されていないスレッドとして機能し、終了時にJVMによって呼び出されます。複数のフックを登録する場合、フックが呼び出される順序は未定義であることに注意してください。