定时器功能实现方法:
web.xml
里面设置定时器:
<listener>
  <listener-class>com.action.NFDFlightDataTaskListener</listener-class>
  </listener>执行任务实现
package com.action;import java.util.TimerTask;
import com.sm.ClosingOfaAcountSIM; //用来发送短信的类实现/** * @author sky * */public class NFDFlightDataTimerTask2 extends TimerTask {
// private static Logger log =
// Logger.getLogger(NFDFlightDataTimerTask.class); @Override
public void run() {
try {
// 在这里写你要执行的内容
ClosingOfaAcountSIM sendcloseaccmsg = new ClosingOfaAcountSIM();
System.out.println("销户通知短信");
sendcloseaccmsg.SendClOAccSIM();

} catch (Exception e) {
// log.info("-------------解析信息发生异常--------------");
}
}}定时设置:package com.action;import java.util.Timer;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;public class NFDFlightDataTaskListener implements ServletContextListener {
private Timer timer = null;
private Timer timer2 = null;

public void contextInitialized(ServletContextEvent event) {
timer = new Timer(true); //第一个定时器
new TimerManager(timer);

timer2 = new Timer(true); //第二个定时器
new TimerManager2(timer2);

} public void contextDestroyed(ServletContextEvent event) {
System.out.println("关闭定时线程");
timer.cancel();
timer2.cancel();
}}实现定时timer2
package com.action;
import java.util.Calendar;
import java.util.Date;
import java.util.Timer;
public class TimerManager2 { // 时间间隔
private static final long PERIOD_DAY = 24 * 60 * 60 * 1000;
public TimerManager2(Timer timer) {
Calendar calendar = Calendar.getInstance(); /** * 定制每日12:30执行方法 ** */ calendar.set(Calendar.HOUR_OF_DAY, 14);
calendar.set(Calendar.MINUTE, 02);
calendar.set(Calendar.SECOND, 0); Date date = calendar.getTime(); // 第一次执行定时任务的时间 // 如果第一次执行定时任务的时间 小于 当前的时间
// 此时要在 第一次执行定时任务的时间 加一天,以便此任务在下个时间点执行。如果不加一天,任务会立即执行。
if (date.before(new Date())) {
date = this.addDay(date, 1);
} //Timer timer = new Timer();
NFDFlightDataTimerTask2 task = new NFDFlightDataTimerTask2();
// 安排指定的任务在指定的时间开始进行重复的固定延迟执行。
timer.schedule(task, date, PERIOD_DAY);
} // 增加或减少天数
public Date addDay(Date date, int num) {
Calendar startDT = Calendar.getInstance();
startDT.setTime(date);
startDT.add(Calendar.DAY_OF_MONTH, num);
return startDT.getTime();
}
}现在的问题是:我设置了两个任务,在我的windows里面运行,两个定时器均会正常工作,但是我部署到liunx的服务器的tomcat里面以后,却只能运行第一个timer,第二个不会运行
求助

解决方案 »

  1.   

     j.u.Timer/j.u.TimerTask 就是一个渣。应该废弃不用。
      

  2.   


    谢谢指导我的问题是:
    public void contextInitialized(ServletContextEvent event) {
    timer = new Timer(true); //第一个定时器
    new TimerManager(timer);timer2 = new Timer(true); //第二个定时器
    new TimerManager2(timer2);}
    这个两个定时器任务,在我的windowsXP下的tomcat6下面是正常工作的,但是在linux的tomcat下面只能运行timer(第一个),能解决吗?然后你说java.util.TimerTask不好,用什么作为定时呢?
      

  3.   

    可以告诉我,你怎么解决的吗?Thank you.