Timer为什么会一运行就执行?
来源:互联网 发布:曲家瑞画画 知乎 编辑:程序博客网 时间:2024/04/28 17:42
package com.utan.timer.test;import java.text.SimpleDateFormat;import java.util.Calendar;import java.util.Date;import java.util.Timer;public class TimerTest {public void test(){try {Timer timer = new Timer();String sToday;SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");sToday = sdf.format(new Date());SimpleDateFormat fTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date dToday = fTime.parse(sToday + " 00:20:00");Calendar cal=Calendar.getInstance(); cal.setTime(dToday);//cal.add(Calendar.DATE,1);Date doTime = cal.getTime();System.out.println(fTime.format(doTime));timer.schedule(new MyTask(), doTime, 24*60*60*1000L);} catch (Exception e) {e.printStackTrace();}}public void test2(){try {Timer timer = new Timer();String sToday;SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");sToday = sdf.format(new Date());SimpleDateFormat fTime = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");Date dToday = fTime.parse(sToday+" 00:20:00");Calendar cal=Calendar.getInstance(); cal.setTime(dToday);cal.add(Calendar.DATE,1);Date doTime = cal.getTime();timer.scheduleAtFixedRate(new MyTask(), doTime, 24*60*60*1000L);} catch (Exception e) {e.printStackTrace();}}public static void main(String[] args) {TimerTest tt = new TimerTest();tt.test();tt.test2();}}
package com.utan.timer.test;import java.util.TimerTask;public class MyTask extends TimerTask{public void run() {try {String threadName = Thread.currentThread().getName();System.out.println("[" + threadName + "] executed...");} catch (Exception e) {e.printStackTrace();}}}
当使用Timer时,发现一运行就执行了,比方说设置的00:20,可现在时间是17:00,定时器却执行了定时任务一次。是因为定时器的时间总从00:00算起吗,当天这次虽然时间过了,还是要补充执行一次?
显然,很多时候,我们不需要其一重启后就执行,如果定时任务是一个比较耗时的操作,那么启动系统时,该定时任务立即执行,会严重的影响系统性能,早晨系统启动缓慢,启动后较长一段时间响应迟钝。特别碰到紧急问题,需要重启时,如此慢的操作对系统管理员来说实在是火上加油。
其实一设置00:20概念上应该是第二日来执行,当天时间已经过去了,就不需要再执行了,所以开始日期应该是第二天,而不是启动应用程序的这一天。
- Timer为什么会一运行就执行?
- 为什么一打开AutoCAD2010就会一闪而掉
- 如何让APP一运行就执行某个函数?
- 为什么onActivityResult会提前执行
- 为什么我用MyEclipse写的Servlet程序运行一次后下次运行就会变成下载?
- 终于明白了为什么一上我的博客就会感染病毒!
- 为什么在word2007文档中我一按空格键就会出现一个点?
- 一执行这句话就会死机,大家帮忙看看是什么原因,如何解决
- 多线程用同一个dao对象就会存在多个线程执行同一方法,为什么不用考虑线程安全问题
- C#在一次运行中,为什么同一段代码第二次执行速度会比第一次执行快很多?
- xcode6一运行就会出现 Unknown class in Interface Builder file
- 我用dev-c++编译的C程序,为什么程序一运行就自动关闭
- tomcat启动timer定时器会执行两次问题解决方案
- page_load为什么会被执行2次
- Docker为什么刚运行就退出了?
- Docker为什么刚运行就退出了?
- .net程序界面运行为什么会变形
- DBCC SHRINKFILE 为什么会运行很长时间?
- Memcached深度分析(ZZ)
- Symbian中所体现的软件编程艺术
- C#使用sql语句读取excel文件数据
- LIVE555play流程
- Linux Java 开发环境安装
- Timer为什么会一运行就执行?
- 投资回报率
- Android ProgressBar
- IE6 JS 编码
- 经典MSSQL语句大全和常用SQL语句命令的作用
- live555 RTSP服务器建立及消息处理流程
- MVP模式下开发的一个图书管理系统(由JAVA修改而来)
- Jquery网站收集
- 类名直接访问类变量