TimerとTimerTask

とあるタスクを定期的に実行したり、指定した時間に実行したりするときは、
TimerとTimerTaskを使うらしい。


試しに作ってみた。


public class TimerTaskTest extends TimerTask {

public static void main(String[] args) {
TimerTaskTest task = new TimerTaskTest();

Timer timer = new Timer();
timer.schedule(task, 0, 1000);

try {
Thread.sleep(10000);
} catch (InterruptedException ignore) {
}

timer.cancel();
}

private static SimpleDateFormat formatter = new SimpleDateFormat("HH:MM:ss.SSS");
public void run() {
System.out.println(formatter.format(new Date()));
}

}


実行結果。


18:10:47.328
18:10:48.328
18:10:49.328
18:10:50.328
18:10:51.328
〜略〜

TimerタスクにはscheduleとscheduleAtFixedRateがあるけど、
違いはこんな感じらしい。

  • schedule

次のタスクは、前のタスクの開始時間から指定したミリ秒後に実行する。
前のタスクの終了が次の開始時刻を過ぎていた場合は次のタスクがすぐに実行するけど、
次の次のタスクは次のタスクの開始時刻+指定したミリ秒に開始される。

  • scheduleAtFixedRate

常に、最初のタスクの開始時間を基点としてタスクを実行する。
前の実行が伸びて、次の開始時刻が過ぎていた場合、すぐに実行する。
そして遅れを取り戻そうとがんばる。




むむぅ。