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