|
package com.sanhe.web.util;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Timer;
import java.util.TimerTask;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
public class DoTimeListener implements ServletContextListener {
private java.util.Timer timer = null;
public void contextInitialized(ServletContextEvent event) {
// TODO Auto-generated method stub
TimerTask task = new TimerTask() {
public void run() {
// System.out.println("正在进行数据统计更新...");
java.util.Date dt = new Date();
SimpleDateFormat sdf = new SimpleDateFormat(
"yyyy-MM-dd HH:mm:ss");
String temp_date = sdf.format(dt);
System.out.println(temp_date);
String day = temp_date.substring(8, 10);
String pre_ss = temp_date.substring(11, 19);
System.out.println(pre_ss);
if (day.equals("29")) {
if(pre_ss.equals("15:50:00")){
System.out.println("我靠,你中了500万哇塞。。。。。。。。。");
try {
System.out.println("线程开始休眠。。。。。");
Thread.sleep(100000);
System.out.println("线程重新启动。。。。。");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
};
timer = new Timer();
event.getServletContext().log("定时器已启动");
timer.schedule(task, 0, 1000);
event.getServletContext().log("已经添加计划任务");
}
public void contextDestroyed(ServletContextEvent event) {
// TODO Auto-generated method stub
timer.cancel();
event.getServletContext().log("定时器已关闭");
}
}
解释:
TimerTask类:将所要运行的任务封装其run方法中。
Timer类:设定定时器的参数,包括起始时间、间隔时间、时延时间,详情见schedule方法。
注意点:同一个TimerTask对象不能两次加入到Timer中执行,若你有多个任务要执行,需要声明多个TimerTask的实例。
TimerTask task = new TimerTask() {
public void run() {
System.out.println("Hi");
}
};
Timer timer = new Timer();
timer.schedule(task, 0, 500);
timer.schedule(task, 0, 1000); // 错误代码
在了解了Timer和Timertask类的运行方式之后,下面就来介绍一个实
际的例子:
在web中实现任务计划-简单的说就相当于实现一个闹钟的功能
实现这个功能,要完成两个步骤:1.定时器的设置;2.对这个定时器
的启动运行和停止进行实时监听。
第一步在初级篇中已经很容易的完成了,第二步的工作不必自己动手
,把这个工作推给容器,来看看怎么实现的:
|