タイマーで定期処理する – 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
- var 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();
↓
- Sat Jan 11 15:37:35 JST 2025
- Sat Jan 11 15:37:36 JST 2025
- Sat Jan 11 15:37:36 JST 2025
- Sat Jan 11 15:37:37 JST 2025
- Sat Jan 11 15:37:37 JST 2025
- ...後略...
似たメソッドとしてscheduleメソッドもあります。scheduleAtFixedRateメソッドとの違いは、処理時間が処理間隔(引数period)を超えた場合の挙動に違いがあります。まず、scheduleメソッドは常に「直前の処理の開始時間」を基点とします。よって、初回の処理が遅延し、2回目の処理開始が遅れた場合、、3回目の開始時間も遅れます。
一方、scheduleAtFixedRateメソッドは常に「初回の処理の開始時間」を基点とします。よって、初回の処理が遅延して、2回目の処理開始が遅れたとしても、3回目の処理は遅れを取り戻そうと、処理間隔を縮めて開始しようとします。
監修
山田祥寛(有限会社 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万部を超える。