注目記事

【Javaコード入門】ユーティリティ_⑤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
  1. var t = new Timer();
  2. t.scheduleAtFixedRate(new TimerTask() {
  3.   @Override
  4.   public void run() {
  5.     System.out.println(new Date());
  6.   }
  7. },  0, 500);
  8. try {
  9.   Thread.sleep(5000);   // 定期実行を待って休止
  10. } catch (InterruptedException e) {
  11.   e.printStackTrace();
  12. }
  13. t.cancel();

  1. Sat Jan 11 15:37:35 JST 2025
  2. Sat Jan 11 15:37:36 JST 2025
  3. Sat Jan 11 15:37:36 JST 2025
  4. Sat Jan 11 15:37:37 JST 2025
  5. Sat Jan 11 15:37:37 JST 2025
  6. ...後略...

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

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

監修

山田祥寛(有限会社 WINGSプロジェクト)
静岡県榛原町生まれ。一橋大学経済学部卒業後、NEC にてシステム企画業務に携わるが、2003年 4 月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト(https://wings.msn.to/)」の代表でもある。主な著書に『改訂 3 版JavaScript 本格入門』(技術評論社)、「独習シリーズ(C#・Python・PHP・Ruby・JSP&サーブレットなど)」(翔泳社)、「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravel など)」(Amazon Kindle)など。売り上げの累計は100万部を超える。