
scheduleAtFixedRate与schedule区别
schedule和scheduleAtFixedRate的区别:
如果指定开始执行的时间在当前系统运行时间之前,scheduleAtFixedRate会把已经过去的时间也作为周期执行(追赶性)而下一次执行的时间是参考上一次执行结束的时间,而schedule不会把过去的时间算上,会立即执行一次,下一次执行时间以上一次开始的时间作为参考。
/** * describe:不延时追赶性测试 * * @author gary * @date 2019/02/20 */ public class TimerTest2 { private static Timer timer = new Timer(); static public class MyTask extends TimerTask { @Override public void run() { System.out.println("start!时间是:" + new Date()); System.out.println("end!时间是:" + new Date()); } } /** * 当前时间:Wed Feb 20 19:59:31 GMT+08:00 2019 * start!时间是:Wed Feb 20 19:59:31 GMT+08:00 2019 * end!时间是:Wed Feb 20 19:59:31 GMT+08:00 2019 * start!时间是:Wed Feb 20 19:59:31 GMT+08:00 2019 * end!时间是:Wed Feb 20 19:59:31 GMT+08:00 2019 * start!时间是:Wed Feb 20 19:59:31 GMT+08:00 2019 * end!时间是:Wed Feb 20 19:59:31 GMT+08:00 2019 * start!时间是:Wed Feb 20 20:00:00 GMT+08:00 2019 * end!时间是:Wed Feb 20 20:00:00 GMT+08:00 2019 * @param args */ public static void main(String[] args) { try { MyTask myTask = new MyTask(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dataString = "2019-2-20 19:51:00"; Date dateRef = sdf.parse(dataString); System.out.println("当前时间:" + new Date()); //timer.schedule(myTask, dateRef, 3000); timer.scheduleAtFixedRate(myTask, dateRef, 3*60*1000); } catch (ParseException e) { e.printStackTrace(); } } } /** * describe:不延时追赶性测试 * * @author gary * @date 2019/02/20 */ public class TimerTest3 { private static Timer timer = new Timer(); static public class MyTask extends TimerTask { @Override public void run() { System.out.println("start!时间是:" + new Date()); System.out.println("end!时间是:" + new Date()); } } /** * 当前时间:Wed Feb 20 20:03:41 GMT+08:00 2019 * start!时间是:Wed Feb 20 20:03:41 GMT+08:00 2019 * end!时间是:Wed Feb 20 20:03:41 GMT+08:00 2019 * start!时间是:Wed Feb 20 20:06:41 GMT+08:00 2019 * end!时间是:Wed Feb 20 20:06:41 GMT+08:00 2019 * @param args */ public static void main(String[] args) { try { MyTask myTask = new MyTask(); SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String dataString = "2019-2-20 19:51:00"; Date dateRef = sdf.parse(dataString); System.out.println("当前时间:" + new Date()); timer.schedule(myTask, dateRef, 3*60*1000); //timer.scheduleAtFixedRate(myTask, dateRef, 3*60*1000); } catch (ParseException e) { e.printStackTrace(); } } }
👁️ 阅读量:0
© 版权声明:本文《scheduleAtFixedRate与schedule区别》内容均为本站精心整理或网友自愿分享,如需转载请注明原文出处:https://www.zastudy.cn/wen/1686480004a264913.html。