当我定期执行耗时的任务时,结果不符合我的期望。
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秒。