記憶庫

自分用のメモです。

シャットダウンフックの使用方法

Java VM の終了時に何らかの処理を行いたい時は、シャットダウンフックと呼ばれるスレッドを作成し、登録しておけばよい。


方法は以下の通り。

package knowledgefort.labo.thread.shutdownhook;

class ShutdownHookLabo {
	
	public static void main(String[] args) {
		
		Thread _th = new Thread(new SampleShutdownHook());
		Runtime.getRuntime().addShutdownHook(_th);
		
		for (int i = 0; i < 10; i++) {
			
			System.out.println("シャットダウンフックのテスト: " + (i + 1));
		}
		
		return;
	}
}

class SampleShutdownHook implements Runnable {
	
	/* (非 Javadoc)
	 * @see java.lang.Runnable#run()
	 */
	public void run() {
		System.out.println("終了しました: " + super.getClass().getName());
		return;
	}
}


Runnable インタフェースを実装したクラスを作成して、終了時に実行したい処理を run() メソッド内に記述しておく。
このクラスをシャットダウンフックと呼ぶ。


※ SampleShutdownHook クラスを、Thread クラスを継承せずに作成している理由は、「マルチスレッドの実現方法(委譲による方法)」の説明どおり。


シャットダウンフックの登録は、Runtime#addShutdownHook() メソッドにて行う。


上記プログラムを実行した結果は以下の通り。

シャットダウンフックのテスト: 1
シャットダウンフックのテスト: 2
シャットダウンフックのテスト: 3
シャットダウンフックのテスト: 4
シャットダウンフックのテスト: 5
シャットダウンフックのテスト: 6
シャットダウンフックのテスト: 7
シャットダウンフックのテスト: 8
シャットダウンフックのテスト: 9
シャットダウンフックのテスト: 10
終了しました: knowledgefort.labo.thread.shutdownhook.SampleShutdownHook


main メソッドの終了時に、シャットダウンフックからのメッセージが表示される。