关于TimerTask里面的scheduledExecutionTime()方法,一些见解
来源:互联网 发布:linux tomcat日志分割 编辑:程序博客网 时间:2024/06/10 18:31
笔者为了测试TimerTask里面的scheduledExecutionTime()这个方法,编写了如下测试代码
public class MyTimerTest02 {public static void main(String[] args) {Timer timer=new Timer();//Calendar calendar=Calendar.getInstance();Date date=new Date();SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-hh HH:mm:ss");System.out.println(sdf.format(date));//calendar.add(Calendar.SECOND, 2);//myTimerTask02.setName("test TimerTask Cancel");////timer.schedule(myTimerTask02, 2000, 1000);TimerTask03 myTimerTask03=new TimerTask03("near time");timer.schedule(myTimerTask03,2000,1000);System.out.println("Timer最近会执行的Task的时间:"+sdf.format(myTimerTask03.scheduledExecutionTime()));}}
public class TimerTask03 extends TimerTask{private String name;public TimerTask03(String name){this.name=name;}@Overridepublic void run() {// TODO Auto-generated method stub//Calendar calendar=Calendar.getInstance();System.out.println("------------>");SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-hh HH:mm:ss");//System.out.println("Timer最近会执行的Task的时间:"+sdf.format(scheduledExecutionTime()));System.out.println("This TimerTask's time is "+sdf.format(new Date()));System.out.println("This TimerTask's name is "+name);System.out.println("<------------");System.out.println();}public String getName() {return name;}public void setName(String name) {this.name = name;}}
执行结果截取
2017-12-10 22:00:32Timer最近会执行的Task的时间:2017-12-10 22:00:33------------>This TimerTask's time is 2017-12-10 22:00:34This TimerTask's name is near time<------------------------>This TimerTask's time is 2017-12-10 22:00:35This TimerTask's name is near time<------------
由此看来当你在测试类下面直接调用scheduledExecutionTime()预计时间会出现偏差
但是如果你把
timer.schedule(myTimerTask03,2000,1000);
改成如下
timer.schedule(myTimerTask03,2000);
结果就是
2017-12-10 22:04:33Timer最近会执行的Task的时间:2017-12-10 22:04:35------------>This TimerTask's time is 2017-12-10 22:04:35This TimerTask's name is near time<------------
小结:如果把scheduledExecutionTime()放在测试类使用测试出来的预计执行时间结果分两种情况
1、timer使用两个参数的schedule是准确的
2、timer使用三个参数的schedule是会比实际执行情况少一分钟
如果我把测试类改成这样
public class MyTimerTest02 {public static void main(String[] args) {Timer timer=new Timer();//Calendar calendar=Calendar.getInstance();Date date=new Date();SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-hh HH:mm:ss");System.out.println(sdf.format(date));//calendar.add(Calendar.SECOND, 2);//myTimerTask02.setName("test TimerTask Cancel");////timer.schedule(myTimerTask02, 2000, 1000);TimerTask03 myTimerTask03=new TimerTask03("near time");timer.schedule(myTimerTask03,2000,1000);//System.out.println("Timer最近会执行的Task的时间:"+sdf.format(myTimerTask03.scheduledExecutionTime()));}}
把TimerTask03改成
public class TimerTask03 extends TimerTask{private String name;public TimerTask03(String name){this.name=name;}@Overridepublic void run() {// TODO Auto-generated method stub//Calendar calendar=Calendar.getInstance();System.out.println("------------>");SimpleDateFormat sdf=new SimpleDateFormat("yyyy-MM-hh HH:mm:ss");System.out.println("Timer最近会执行的Task的时间:"+sdf.format(scheduledExecutionTime()));System.out.println("This TimerTask's time is "+sdf.format(new Date()));System.out.println("This TimerTask's name is "+name);System.out.println("<------------");System.out.println();}public String getName() {return name;}public void setName(String name) {this.name = name;}}
结果是
2017-12-10 22:07:25------------>Timer最近会执行的Task的时间:2017-12-10 22:07:28This TimerTask's time is 2017-12-10 22:07:28This TimerTask's name is near time<------------------------>Timer最近会执行的Task的时间:2017-12-10 22:07:29This TimerTask's time is 2017-12-10 22:07:29This TimerTask's name is near time<------------
小结:在Task类里面调用scheduledExecutionTime()
因为是预计执行时间,取的是最近注意是最近,在Task里面调用之后,时间就是当前调用Task的时间。
总结:这个scheduledExecutionTime()还是有略微的问题的,我就不分析底层了。
阅读全文
0 0
- 关于TimerTask里面的scheduledExecutionTime()方法,一些见解
- 关于Thread类中run()方法的一些见解
- 一些关于考研的见解
- 关于cookie的一些见解
- 关于sequence的一些见解
- 关于Maven的一些见解
- 关于xml的一些见解
- 关于imageloader的一些见解
- 关于Activity的生命周期的一些见解
- 关于CSS+div的一些见解
- 关于项目管理的一些个人见解
- 关于CString to char * 的一些见解
- 关于浮动的一些个人见解
- 关于做系统的一些见解
- 关于CSS3于HTML5的一些见解
- 关于函数返回值的一些见解
- 关于Fragment使用的一些见解
- 关于mvp模式自己的一些见解
- ViewPager详解
- 数据挖掘学习------------------4-分类方法-3-贝叶斯分类(Bayes)
- 集合方法小结
- Spring Boot(七)——部署
- 斯坦福大学机器学习笔记——聚类(k-均值聚类算法、损失函数、初始化、聚类数目的选择)
- 关于TimerTask里面的scheduledExecutionTime()方法,一些见解
- LSV查看历史影像
- Oracle环境变量
- HTML5-学习之路漫漫,div中的div垂直水平都居中
- JSON和对象或集合间的转换
- 流和并发
- FTP4J 指南
- 解密ResNet:Identity Mappings in Deep Residual Networks论文笔记
- 设计模式总结: 5种创建型,7种结构型,11种行为型