System.exit イベントをキャプチャするにはどうすればよいですか?

StackOverflow https://stackoverflow.com/questions/914666

  •  06-09-2019
  •  | 
  •  

質問

私はJavaでアプリケーションを持っています。誰かがコード内でコードSystem.exit()を終了した場合、メッセージのログ記録やリソースの解放などのことを行うためにリスナーが呼び出される必要があることを確認しようとしています...

どのように実装すればよいでしょうか。提案/アプローチは大歓迎です。

役に立ちましたか?

解決

Runtime.addShutdownHook メソッドを使用してシャットダウン フックを追加できます。シャットダウン フックは基本的には開始されていません Thread, 、Java 仮想マシンのシャットダウン時に実行されます。

ただし、これは JVM のライフサイクルの非常に敏感な時期に実行されるため、慎重に扱う必要がある領域です。API仕様より Runtime.addShutdownHook 方法:

シャットダウンフックは、仮想マシンのライフサイクルで繊細な時期に実行されるため、防御的にコード化する必要があります。特に、スレッドセーフであり、可能な限りデッドロックを避けるように書かれるべきです。

いずれにせよ、十分な準備をせずにシャットダウン フックに取り組むべきではないため、シャットダウン フックがどのように機能するかについて少し読んでください。API 仕様を必ずよく読んでください。 Runtime.addShutdownHook 方法。

この回答に関する情報を検索して見つけた記事をいくつか紹介します。

他のヒント

関数Runtime.addShutdownHook(Thread thehook)は、Java仮想マシンにフックを登録することができます。
フックは、終了時にJVMによって呼び出される初期化されたが未開始のスレッドとして動作します。場合には複数のフックを登録し、フックが呼び出される順序は未定義であることに注意します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top