Skip to content
閲覧中:
10.ScheduledExecutorService

10.ScheduledExecutorService

はい。PlantUML なら、タイミング図で表すと分かりやすいです。

scheduleAtFixedRate

開始時刻の間隔が一定です。

scheduleAtFixedRateidlerunning1回目開始1回目終了2回目開始2回目終了3回目開始3回目終了0134679
scheduleAtFixedRateidlerunning1回目開始1回目終了2回目開始2回目終了3回目開始3回目終了0134679

イメージ:

Text Only
開始: 1秒後
周期: 3秒
1回目開始: 1秒
2回目開始: 4秒
3回目開始: 7秒

scheduleWithFixedDelay

前回の終了から次回の開始までの待ち時間が一定です。

scheduleWithFixedDelayidlerunningwaiting1回目開始1回目終了2回目開始2回目終了3回目開始3回目終了013681113
scheduleWithFixedDelayidlerunningwaiting1回目開始1回目終了2回目開始2回目終了3回目開始3回目終了013681113

イメージ:

Text Only
開始: 1秒後
delay: 3秒
処理時間: 2秒
1回目開始: 1秒
1回目終了: 3秒
2回目開始: 6秒
2回目終了: 8秒
3回目開始: 11秒

  • 違い
Text Only
scheduleAtFixedRate
開始 → 3秒後に開始 → 3秒後に開始
scheduleWithFixedDelay
開始 → 終了 → 3秒待つ → 開始

Java Gold 的には、

Text Only
FixedRate  = 開始時刻ベース
FixedDelay = 終了時刻ベース

で覚えるとよいです。