ScheduledExecutorServiceインターフェース
`# | `クラス名 | 概要 |
1 | newSingleThreadScheduledExecutor | 一つのスレッドでタスク処理を行う |
2 | newScheduledThreadPool | タスクを処理するスレッドの数を指定できる |
scheduleWithFixedDelay()
* 指定された初期遅延経過後に指定したタスクを実行し、以後、定期的にそのタスクを繰り返す
■イメージ図
| 【Task処理】 【Task処理】 【Task処理】
|<-- 初期遅延 -->| |<----- Delay ---->| |<----- Delay ---->|
scheduleAtFixedRate()
* 指定された初期遅延経過後に指定したタスクを実行し、以後、定期的にそのタスクを繰り返す
■イメージ図
| 【Task処理】 【Task処理】 【Task処理】
|<-- 初期遅延 -->|<---------- Period --------->|<---------- Period --------->|
schedule()
* 指定された遅延後に実行
サンプル
* 初期遅延(サンプルだと5秒)経過後に、定期的(サンプルだと3秒)に
タスクタイマー(SampleTaskTimer)を実行する
SampleScheduledService.java
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
public class SampleScheduledService {
ScheduledExecutorService scheduler =
Executors.newSingleThreadScheduledExecutor();
public void start() {
// 初期遅延(5秒)経過後に、定期的(3秒)にSampleTaskTimerを実行する
this.scheduler.scheduleWithFixedDelay(
new SampleTaskTimer(), 5, 3, TimeUnit.SECONDS);
}
public void stop() {
this.scheduler.shutdown();
}
}
SampleTaskTimer.java
import java.text.SimpleDateFormat;
import java.util.TimerTask;
public class SampleTaskTimer extends TimerTask {
private SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
"HH:mm:ss SSS");
@Override
public void run() {
System.out.println("Time : "+ simpleDateFormat.format(System.currentTimeMillis()));
}
}
import java.text.SimpleDateFormat;
public class Main {
public static void main(String[] args) {
SimpleDateFormat simpleDateFormat = new SimpleDateFormat(
"HH:mm:ss SSS");
System.out.println("Start Time : " + simpleDateFormat.format(System.currentTimeMillis()));
SampleScheduledService service = new SampleScheduledService();
service.start();
try {
Thread.sleep(60000);
} catch (InterruptedException ignore) {
}
service.stop();
System.out.println("End Time : " + simpleDateFormat.format(System.currentTimeMillis()));
}
}
出力結果
Start Time : 02:03:27 894
Time : 02:03:32 901
Time : 02:03:35 903
Time : 02:03:38 904
Time : 02:03:41 905
Time : 02:03:44 906
Time : 02:03:47 907
Time : 02:03:50 908
Time : 02:03:53 909
Time : 02:03:56 909
Time : 02:03:59 910
Time : 02:04:02 911
Time : 02:04:05 912
Time : 02:04:08 913
Time : 02:04:11 914
Time : 02:04:14 915
Time : 02:04:17 916
Time : 02:04:20 917
Time : 02:04:23 919
Time : 02:04:26 920
End Time : 02:04:27 901