「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