Geekroid-ギークロイド(仮)|ITエンジニアの日常をささいな情報で彩るコラム

ITエンジニアの転職

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();

↓

Tue Aug 23 17:28:53 JST 2016
Tue Aug 23 17:28:54 JST 2016
Tue Aug 23 17:28:54 JST 2016
Tue Aug 23 17:28:55 JST 2016
Tue Aug 23 17:28:55 JST 2016
...後略...

似たメソッドとしてscheduleメソッドもあります。scheduleAtFixedRateメソッドとの違いは、処理時間が処理間隔(引数period)を超えた場合の挙動に違いがあります。まず、scheduleメソッドは常に「直前の処理の開始時間」を基点とします。よって、初回の処理が遅延し、2回目の処理開始が遅れた場合、、3回目の開始時間も遅れます。
一方、scheduleAtFixedRateメソッドは常に「初回の処理の開始時間」を基点とします。よって、初回の処理が遅延して、2回目の処理開始が遅れたとしても、3回目の処理は遅れを取り戻そうと、処理間隔を縮めて開始しようとします。

ユーティリティ
getPropertiesメソッド
Randomクラス
DateFormatクラス
NumberFormatクラス
Timerクラス

Geekroid-ギークロイド(仮)|ITエンジニアの日常をささいな情報で彩るコラム

ITエンジニアの転職