又有同学问我这两个方法的区别,其实很简单,一说你就明白
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,发生异常,定时任务就再也不执行了