ScheduledExecutorService#scheduleAtFixedRate无法正常工作

时间:2018-10-16 11:22:41

标签: java executorservice scheduledexecutorservice

当我定期执行耗时的任务时,结果不符合我的期望。

public static void main(String[] args) {
    ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(10);

    scheduler.scheduleAtFixedRate(() -> {
        System.out.println("start: " + System.currentTimeMillis());
        try {
            TimeUnit.SECONDS.sleep(3);
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("end  : " + System.currentTimeMillis());
    }, 0, 1, TimeUnit.SECONDS);
}
/*
    start: 1539688734439
    end  : 1539688737442
    start: 1539688737443
    end  : 1539688740447
    start: 1539688740447
    end  : 1539688743452
    start: 1539688743452
    end  : 1539688746456
    start: 1539688746456
    end  : 1539688749461
    ...
 */

如上所示,两个start之间的间隔为3秒,而不是1秒。

1 个答案:

答案 0 :(得分:1)

doc开始,这正是它的设计方式:

  

如果执行此任务所需的时间超过其期限,则   后续执行可能会延迟开始,但不会同时执行   执行。