プログラムによっては、外部からの終了イベント(Ctrl-Cの入力など)でいきなり終わってしまっては困るものが有ります。そこでJavaでは、JVMの終了時に実行したい処理を仕込むためのシャットダウンフックという仕組みが用意されています。 手元に、リクエストを受け付けてマルチスレッドでタスクを実行するプログラムが有ります。このプログラムの場合、やりかけのタスク(とキューに溜っているタスク)が全部終了してからプロセスを終了したいので、シャットダウンフック内でタスク実行スレッドの終了を待つようにしました。スレッドの管理をjava.util.concurrent.ExecutorServiceで行なうようにするとこれは意外と簡単に実現できます。 以下は、そのプログラムを簡単化したサンプルです。 import java.util.concurrent.ExecutorService; import j