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 ответ
Это именно так, как это разработано, из документа:
Если какое-либо выполнение этой задачи занимает больше времени, чем ее период, последующие выполнения могут начаться с опозданием, но не будут выполняться одновременно.