1.首先创建类ContextListener 并使其继承ServletContextListener,代码中的stop_num很重要,必须要有。
package com.broadway.qxt.servletWeb;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import com.broadway.qxt.thread.TaskPlan;
public class ContextListener implements ServletContextListener{
public static int stop_num = 1;//任务计划是否关闭 0:关闭
private TaskPlan taskPlan = null;
@Override
public void contextDestroyed(ServletContextEvent arg0) {
try {
// TODO 自动生成的方法存根
System.out.println("--------------定时器销毁-------------");
stop_num = 0;
taskPlan.interrupt();
} catch (Exception e) {
}
}
@Override
public void contextInitialized(ServletContextEvent arg0) {
System.out.println("------------定时器已启动-------------stop_num="+stop_num+"---");
taskPlan = new TaskPlan();
taskPlan.start();
}
}
2.创建任务计划类TaskPlan
package com.broadway.qxt.thread;
import java.util.Calendar;
import com.broadway.qxt.method.OperMethod;
import com.broadway.qxt.method.OutputMethod;
import com.broadway.qxt.servletWeb.ContextListener;
public class TaskPlan extends Thread{
@Override
public void run() {
int y = -1;
new FileLoadHandleThread().start();
while (true) {
try {
Calendar cal = Calendar.getInstance();
int hour = cal.get(Calendar.HOUR_OF_DAY);
//当前分
int minute = cal.get(Calendar.MINUTE);
//每天7点半执行
if (hour==7 && minute==30 && y != minute) {
//线程
}
// 每小时执行
if (minute == 0 && y != minute) {
//线程
}
y = minute;
} catch (Exception e) {
e.printStackTrace();
}
try {
Thread.sleep(20000);
//下面break很重要,如果没有则当web重启时,该线程不会停止
if (ContextListener.stop_num == 0) {
break;
}
} catch (Exception e) {
}
}
}
}
3.在web.xml中监听,listener-class值就是ContextListener类的路径
<listener>
<listener-class>com.broadway.qxt.servletWeb.ContextListener</listener-class>
</listener>
4.大功告成,赶快试验吧!