34.
タイマー処理
Timerクラス
Timerクラス
Timerクラスはスケジュール(指定時間や時間間隔)を使って、バックグラウンドで実行するスレッド処理です。
インスタンス
newすると、新規タイマーが生成されます。引数の booleanは、デーモンで実行するかどうかを設定します。
new Timer(boolean isDaemon)
ユーザスレッド
ユーザースレッドは、タスクを完了するのを待ってから終了する、優先度の高いスレッドです。
デーモンスレッド
デーモンスレッドは、すべてのユーザースレッドが終了すると自動的に終了するスレッドです。
schedule()
schedule() メソッドを実行すると、指定した時刻で run() メソッドを実行します。第2引数はデータ型によって処理が異なります。
指定時刻に実行
指定した時刻に1度だけ実行します。現在より過去の時刻を設定すると即座に実行します。
schedule(TimerTask task, Date time)
第3引数を指定すると、指定した時間間隔(ミリ秒)で実行します。
schedule(TimerTask task, Date firstTime, long period)
現在から指定時刻後に実行
現在時刻から、指定時間(ミリ秒)後に1度だけ実行します。
schedule(TimerTask task, long delay)
第3引数を指定すると、指定した時間間隔(ミリ秒)で実行します。
schedule(TimerTask task, long delay, long period)
cancel()
cancel() メソッドはタイマーを終了します。
cancel();
TimerTaskクラス
TimerTaskクラスは時間を指定して処理します。タイマー処理を実行するには、run() メソッドを必ず指定します。
TimerTask task = new TimerTask() {
public void run() {
//タイマー設定後の処理
}
};
日付フォーマット
SimpleDateFormatクラス
Javaで日付を扱うにはDate型にする必要があります。 SimpleDateFormatクラスは、年月日や時刻の文字列データを扱うのに役立つ日付フォーマットクラスです。
SimpleDateFormat sdf = new SimpleDateFormat(日付フォーマット);
フォーマッタの記述
日付フォーマットは、年月日を「 / 」、時刻を「 : 」で区切ります。
yyyy/MM/dd HH:mm:ss
フォーマット | 意味 | 例 |
---|---|---|
yyyy | Year(4桁) | 2022 |
MM | Month(2桁) | 01 |
dd | Day(2桁) | 15 |
HH | Hour(2桁) | 20 |
mm | Minute(2桁) | 15 |
ss | Seconds(2桁) | 00 |
parse()
文字列から日付型(Date型)に変換するには、parse() メソッドを利用します。
SimpleDateFormat sdf = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
Date date = sdf.parse("2022/01/15 20:15:00");
System.out.println(date);
ParseExceptionとは
日付フォーマットを「yyyy-MM-dd」と指定した場合、ルールが違うためParseExceptionのエラーが発生します。 parse() メソッドはParseExceptionでのエラー検知が必要のため、そのまま記述するとコンパイルエラーになります。
ParseExceptionの追加
コンパイルエラー箇所をマウスオーバーし、「スロー宣言の追加」を選択すると、throws にParseExceptionが追加されます。

実行メソッドに、ParseExceptionが追加できました。
public static void main(String[] args) throws ParseException {
};
結果
日本時刻に設定してある場合は、日本表示ん日時(JST)で表示されます。
Sat Jan 15 20:15:00 JST 2022
現在から指定時刻後に実行
現在から3秒後に処理をするプログラムです。
SecondsTimer.java
package sample;
import java.util.Timer;
import java.util.TimerTask;
public class SecondsTimer {
public static int seconds = 3;
public static void main(String[] args) {
System.out.println(seconds + "秒後に実行します。");
int ms = seconds * 1000;
Timer timer = new Timer();
TimerTask task = new TimerTask() {
public void run() {
System.out.println("実行しました!");
}
};
timer.schedule(task, ms);
}
}
指定時刻から定期的に実行
開始時刻を指定して、定期時間間隔で処理するプログラムです。つぎの例は「12:30」から「10秒毎」に実行し、5回実行したら終了します。
DateTimer.java
package sample;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
public class DateTimer {
public static long interval = 3;
public static long count = 0;
public static long maxCount = 5;
public static void main(String[] args) throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("HH:mm:ss");
Date date = sdf.parse("12:36:00");
Timer timer = new Timer(false);
TimerTask task = new TimerTask() {
@Override
public void run() {
count++;
if (count > maxCount) {
timer.cancel();
System.out.println("終了しました");
} else {
System.out.println(count + "回、実行しました");
}
}
};
timer.schedule(task, date, interval * 1000);
}
}