1. ホーム
  2. java

[解決済み] scheduleAtFixedRateとscheduleWithFixedDelayの比較

2022-05-29 20:51:13

質問

との主な違いは何ですか? scheduleAtFixedRatescheduleWithFixedDelay のメソッドは ScheduledExecutorService ?

scheduler.scheduleAtFixedRate(new Runnable() {
    @Override
    public void run() {
        System.out.println("scheduleAtFixedRate:    " + new Date());
    }
}, 1, 3L , SECONDS);

scheduler.scheduleWithFixedDelay(new Runnable() {
    @Override
    public void run() {
        System.out.println("scheduleWithFixedDelay: " + new Date());
    }
}, 1, 3L , SECONDS);

は全く同じ時間に表示されるため、全く同じ間隔で実行されていることになります。

どのように解決するのですか?

を追加してみてください。 Thread.sleep(1000); の中に run() メソッド内で呼び出すことができます... 基本的には、前の実行がいつだったかに基づいて何かをスケジューリングするのと 終了 と、それが(論理的に)いつ が始まる .

例えば、アラームを固定された レート で鳴るようにスケジュールし、鳴るたびにコーヒーを飲み、10 分かかるとします。それが午前 0 時に始まるとします。

00:00: Start making coffee
00:10: Finish making coffee
01:00: Start making coffee
01:10: Finish making coffee
02:00: Start making coffee
02:10: Finish making coffee

を固定でスケジュールすると 遅延 を1時間とした場合、私は

00:00: Start making coffee
00:10: Finish making coffee
01:10: Start making coffee
01:20: Finish making coffee
02:20: Start making coffee
02:30: Finish making coffee

どれがいいかは、タスクによって異なります。