【问题标题】:ScheduledExecutorService#scheduleAtFixedRate is not workingScheduledExecutorService#scheduleAtFixedRate 不起作用
【发布时间】:2018-10-16 11:22:40
【问题描述】:

当我定期执行一项耗时的任务时,结果并不符合我的预期。

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秒。

【问题讨论】:

    标签: java executorservice scheduledexecutorservice


    【解决方案1】:

    这正是它的设计方式,来自doc

    如果此任务的任何执行时间超过其周期,则 随后的执行可能开始较晚,但不会同时执行 执行。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-06-03
    • 2011-07-30
    • 2014-10-30
    • 2014-08-30
    • 2020-05-14
    相关资源
    最近更新 更多