「Java」Runtime#addShutdownHook を使ったサンプル
Runtime#addShutdownHook で登録したシャットダウンフックは System#exit あるいは Ctrl+C なりのユーザ割り込みが発生した場合に呼ばれるとのことです。
・Runtime (Java Platform SE 7 )< https://docs.oracle.com/javase/jp/7/api/java/lang/Runtime.html#addShutdownHook(java.lang.Thread) >
ということで、簡単な動作確認サンプルを2つほど。
■ ShutdownTest1.java
public class ShutdownTest { public static void main(String[] args) throws Exception { Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { System.out.println("run shutdown hook !!"); } }); System.out.println("shutdown"); System.exit(0); } }
■ 実行結果
$ java ShutdownTest shutdown run shutdown hook !!
■ ShutdownTest2.java
public class ShutdownTest2 { public static void main(String[] args) throws Exception { final ShutdownTest obj = new ShutdownTest(); Runtime.getRuntime().addShutdownHook(new Thread() { @Override public void run() { synchronized(obj) { System.out.println("run shutdown hook !!"); obj.notifyAll(); } } }); synchronized(obj) { obj.wait(); System.out.println("shutdown !!"); } } }
■ 実行結果
$ java ShutdownTest & [1] 1666 $ kill -2 1666 run shutdown hook !! shutdown !!
非常に簡単ですが以上になります。
[環境情報]
Ubuntu 14.04
OpenJDK 1.7.0_65