一个JAVA定时器的疑惑
首先,说明下需求,我在tomcat启动的时候,就加载这一监听,然后希望在早上9点的时候,定时执行某一程序。下面是代码部分.
方法schedule(TimerTask task, Date firstTime, long period) 安排指定的任务在指定的时间开始进行重复的固定延迟执行。
在AutoSendMessage中实现TimerTask,可以理解成一个简单的输出语句。
问题就是:代码中,红色的部分, cal.Time()是第一次执行的时间, 24 * 60* 60 * 1000l间隔24小时。
那么现在时间是 2009-11-20 15:25:00, 我的期望是不执行,因为现在不是早上9点。
但是AutoSendMessage中的方法,还是执行了。
这是什么原因???还有,应该怎样修改,才能和期望一样,每天早上执行??我随时都可能要重启服务器,tomcat启动的时候,就会进入ContextListener
public class ContextListener extends HttpServlet implements
ServletContextListener {
/**
*
*/
private static final long serialVersionUID = 1L;
public ContextListener() {
}
private java.util.Timer timer = null;
public void contextInitialized(ServletContextEvent event) {
timer = new java.util.Timer(true);
event.getServletContext().log("定时器已启动");
Calendar cal=Calendar.getInstance(); //设置时间为9点
cal.set(Calendar.HOUR_OF_DAY, 9);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND,0);
//System.out.println(cal.getTime()) ;
//今天是2009-11-20,打印的结果:Fri Nov 20 09:00:00 CST 2009
timer.schedule(new AutoSendMessage(event.getServletContext()), cal.getTime(),
24 * 60* 60 * 1000l);
event.getServletContext().log("已经添加任务调度表");
}
public void contextDestroyed(ServletContextEvent event) {
timer.cancel();
event.getServletContext().log("定时器销毁");
}
}
方法schedule(TimerTask task, Date firstTime, long period) 安排指定的任务在指定的时间开始进行重复的固定延迟执行。
在AutoSendMessage中实现TimerTask,可以理解成一个简单的输出语句。
问题就是:代码中,红色的部分, cal.Time()是第一次执行的时间, 24 * 60* 60 * 1000l间隔24小时。
那么现在时间是 2009-11-20 15:25:00, 我的期望是不执行,因为现在不是早上9点。
但是AutoSendMessage中的方法,还是执行了。
这是什么原因???还有,应该怎样修改,才能和期望一样,每天早上执行??我随时都可能要重启服务器,tomcat启动的时候,就会进入ContextListener
...全文
相关推荐
java 四种常见的 定时器
四种常见的定时器:1.延时一段时间开启 频率执行 2.延时一段时间执行只执行一次 3.固定的系统时间执行,然后频率执行
时间轮定时器java实现
用java实现最小堆的定时器,和用时间轮实现定时器,可以运行,简单的实现
使用java定时器的几种方式
java中实现定时器的三种方式,qutarz+spring, spring-task, java Timer
Java实现一个简单的定时器代码解析
主要介绍了Java实现一个简单的定时器代码解析,具有一定借鉴价值,需要的朋友可以参考下。
Java定时器
Java定时器,实现以圈计时和以秒计时两种功能。特比适合Java初学者


Java SE
