次の関数をいくつか呼び出すとします。
public void StartTimedRuns(){
Timer timer = new Timer();
timer.scheduleAtFixedRate(new TimerTask(){
public void run(){
//do something that takes less than a minute
}
}, 0, 60*1000);
}
私の理解では、この時点で多数のスレッドが同時に実行されます。つまり、各タイマー インスタンスは、1 分間隔で存続期間の短いスレッドを生成します。
次の手順に従って、シャットダウン フック (Control-C を押したときに実行される) をインストールするとします。
シャットダウン フックは、すべてのタイマーをキャンセルします。(タイマーをクラスレベルのコレクションに保存すると仮定します)
VM が終了する前に、すべてのアクティブなスレッドが完了するまで実行されることを保証できますか?
これに関連して、シャットダウンフックはスレッドがすべて終了したときにのみ呼び出されますか?