ScheduledExecutorService # scheduleAtFixedRate не работает - PullRequest
0 голосов
/ 16 октября 2018

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

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 Ответ

0 голосов
/ 16 октября 2018

Это именно то, как оно разработано, из doc :

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

...