`
java-mans
  • 浏览: 11453370 次
文章分类
社区版块
存档分类
最新评论

Timer为什么会一运行就执行?

 
阅读更多
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概念上应该是第二日来执行,当天时间已经过去了,就不需要再执行了,所以开始日期应该是第二天,而不是启动应用程序的这一天。


分享到:
评论

相关推荐

    pb多timer事件实例.zip

    PB实现同一个窗口多个TIMER事件功能,互不影响同时运行

    Python 实现某个功能每隔一段时间被执行一次的功能方法

    某个函数需要在每个小时的 3 分钟时候被执行一次,我希望我 15:45 启动程序,过了18 分钟在 16:03 这个函数被执行一次,下一次过 60 分钟在 17:03 再次被执行,下一次 18:03,以此类推。 以下是我基于 Timer 做...

    C#定时器实现自动执行的方法

    //下面讲一个打开窗体定时执行按钮的东西 private void Form1_Load(object sender, EventArgs e) { System.Timers.Timer pTimer = new System.Timers.Timer(5000);//每隔5秒执行一次,没用winfrom自带的 pTimer....

    C#定时器(Timer)

    C#定时器(Timer)实现了随着时间的变化,代码自动运行,以改变界面顔色的方式表达定时器

    VB单类模块Timer源码,可异步执行演示.rar

    使用方法和 vb 的Timer控件一样,只是增加了一个 AsynExecute 属性,当设置此属性 = true 的时候, Timer 是以异步的方式运行的, 比如,第 1 次timer事件代码未运行完,第2次就开始了,那么第1次事件代码将暂停,第 3 次.....

    timer定时运行某段代码(源码,支持VS08版及以上)

    定时器,定时运行某段代码,VS2008版及以更高版本即可完美运行,C#

    自动关机辅助工具 Shutdown Timer Classic 1.2.3 中文免费版.zip

    Shutdown Timer Classic 是一个小巧的 Windows 应用程序,它允许您设置一个计时器,该计时器将关闭,重新启动,休眠,睡眠或锁定您的计算机。它是完全免费和开源的,并且不使用互联网。随时为 GitHub 上的项目做贡献...

    python每天定时执行一次任务

    使用Python的timer来完成每天执行一次的定时任务,环境是windows,python3.4

    一个可异步执行的VB单类模块Timer演示示例

    使用方法和 vb 的Timer控件一样,只是增加了一个 AsynExecute 属性,当设置此属性 = true 的时候, Timer 是以异步的方式运行的, 比如,第 1 次timer事件代码未运行完,第2次就开始了,那么第1次事件代码将暂停,第 3 次.....

    java Timer 定时每天凌晨1点执行任务

    主要介绍了java Timer 定时每天凌晨1点执行任务的代码,代码简单易懂,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下

    不同类型的Timer的区别

    一旦接收到消息,它们就进行处理并等待下一个消息到来。另外,辅助线程用来执行后台处理而且不使用消息循环。Windows 计时器和基于服务器的计时器在运行时都使用 Interval 属性。线程计时器的时间间隔在 Timer 构造...

    自动定时运行示例源码

    这是一个简单的自动定时运行,通过它,可以做很多需要定时执行的事,比如定时每天自动采集,这样就无需站长天天到网站上点一下采集了。在定时执行函数中可以写任何你要定时执行的代码,需要什么应用自己发挥吧

    c/c++用一个源文件,一个头文件实现的 优先队列定时器 源码,包含测试代码,可运行

    c/c++用一个源文件,一个头文件实现的 优先队列定时器 源码,包含测试代码,可运行。 说明: 1、源码中包含三个文件qtimer.cpp、qtimer.h、test_main.cpp; 2、qtimer.cpp中会创建一个优先队列来管理定时任务,一个...

    定时执行任务例子 绝对好用

    Timer schedule JAVA J2EE WEB 指定每一天某时某分执行某项任务的功能。 读取目录下配置文件的内容。 开发环境jdk1.5.0_22、MyEclipse6.5中文版。 定时任务管理器,定时执行,定时任务,run 绝对能用

    Quartz最全开发手册(中文版)

    • 为什么不使用java.util.Timer? • 如何build Quartz源码? 杂项问题 • Quartz可以运行多少任务? • 通过RMI使用Quartz存在一些问题。 关于Jobs的问题 • 如何能够控制Jobs的实例化。 • 如何避免一个任务在完成...

    详解C#中的定时器Timer类及其垃圾回收机制

    主要介绍了C#中的定时器Timer类及其垃圾回收机制,讲解了Timer相关的单线程异步工作,需要的朋友可以参考下

    self-timer:轻量级JavaScript回调运行器

    您可以在要执行时的时间运行回调,就像self-timer一样。 例如,如果今天是工作日(星期一至星期五),请运行一些功能, self-timer.js可以编写simple 。 var st = new SelfTimer ( new Date ( ) ) ;st . on ( ) . ...

    免费倒数计时器 Free Countdown Timer 5.1.0.zip

    在我们的测试过程中,我们注意到 Free Countdown Timer 非常快速且无错误地执行了一项任务。它在系统资源上的占用空间很小,因此计算机的整体性能不会受到影响。 总而言之,Free Countdown Timer 被证明是一种高效...

    TimerTask执行每日定时任务

    利用jdk中的timer和timertask来实现,每天定时执行的任务。

    java 定时器任务timer 随tomcat启动而启动 同步启动

    我们通常写的timer都是用main方法写的定时器,但同样我们...不过有个致命伤就是集群方面跟quartz不能比,此方法代码做参考不错,如果要用,那么这个方法在一台服务器上执行就行了,其他服务器注释掉web中的监听就行了。

Global site tag (gtag.js) - Google Analytics