Timerクラス
タイマーで定期処理する – Timerクラス- public void schedule(TimerTask task, long delay, long period)
- public void scheduleAtFixedRate(TimerTask task, long delay, long period)
- task:定期実行するタスク
- delay:タスクを実行する前の遅延時間(ミリ秒)
- period:タスクを実行する間隔(ミリ秒)
一定間隔で、決められた処理を繰り返し実行したいならば、Timerクラス(java.utilパッケージ)のscheduleAtFixedRateメソッドを利用します。引数には、実行すべき処理(TimerTaskオブジェクト)、開始時刻(ミリ秒)、実行スパン(ミリ秒)の順で指定します。
UtilTimer.java
Timer t = new Timer();
t.scheduleAtFixedRate(new TimerTask() {
@Override
public void run() {
System.out.println(new Date());
}
}, 0, 500);
try {
Thread.sleep(5000); // 定期実行を待って休止
} catch (InterruptedException e) {
e.printStackTrace();
}
t.cancel();
Mon Jan 06 08:28:48 JST 2020 Mon Jan 06 08:28:48 JST 2020 Mon Jan 06 08:28:49 JST 2020 Mon Jan 06 08:28:49 JST 2020 Mon Jan 06 08:28:50 JST 2020 ...後略...
似たメソッドとしてscheduleメソッドもあります。scheduleAtFixedRateメソッドとの違いは、処理時間が処理間隔(引数period)を超えた場合の挙動に違いがあります。まず、scheduleメソッドは常に「直前の処理の開始時間」を基点とします。よって、初回の処理が遅延し、2回目の処理開始が遅れた場合、、3回目の開始時間も遅れます。
一方、scheduleAtFixedRateメソッドは常に「初回の処理の開始時間」を基点とします。よって、初回の処理が遅延して、2回目の処理開始が遅れたとしても、3回目の処理は遅れを取り戻そうと、処理間隔を縮めて開始しようとします。






