又有同学问我这两个方法的区别,其实很简单,一说你就明白
ScheduledExecutorService schedule = Executors.newScheduledThreadPool(1);
schedule.scheduleAtFixedRate(new Runnable() {
@Override
public void run() {
try {
System.out.println(new Date());
Thread.sleep(3000);
} catch (Throwable e) {
e.printStackTrace();
}
}
}, 1, 2, TimeUnit.SECONDS);
输出:
Fri Jan 13 10:25:23 CST 2017
Fri Jan 13 10:25:26 CST 2017
把代码改成scheduleWithFixedDelay
Fri Jan 13 10:26:01 CST 2017
Fri Jan 13 10:26:06 CST 2017
很简单,
scheduleAtFixedRate
如果任务执行时间小于延迟时间,按照延迟时间执行,如果大于,马上执行
scheduleWithFixedDelay ,下次执行时间 = 任务执行时间+延迟
另外补充一点,你的runnable里务必try异常,要是不try,发生异常,定时任务就再也不执行了
本文详细解释了ScheduledExecutorService中的scheduleAtFixedRate与scheduleWithFixedDelay两种方法的区别,并通过示例代码展示了这两种方法在任务执行间隔上的不同表现。
1315

被折叠的 条评论
为什么被折叠?



