ScheduledExecutorService#scheduleAtFixedRate не работает

Когда я периодически выполняю трудоемкую задачу, результаты не соответствуют моим ожиданиям.

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
    ...
 */

Как показано выше, 3 секунды между двумя start вместо 1 секунды.

1 ответ

Это именно так, как это разработано, из документа:

Если какое-либо выполнение этой задачи занимает больше времени, чем ее период, последующие выполнения могут начаться с опозданием, но не будут выполняться одновременно.

Другие вопросы по тегам