求助,使用定时器,执行两个定时任务为何无效?

tomorrower 2012-10-02 09:08:45
定时器功能实现方法:
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,第二个不会运行
求助
...全文
477 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhijunwoo 2013-04-09
  • 打赏
  • 举报
回复
可以告诉我,你怎么解决的吗?Thank you.
tomorrower 2012-10-24
  • 打赏
  • 举报
回复
是我分发的时候的问题,解决了,谢谢
tomorrower 2012-10-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

Quartz
[/Quote]

谢谢,有没有好用的例子可以参考的?
tomorrower 2012-10-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]

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

谢谢指导

我的问题是:
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不好,用什么作为定时呢?
huntor 2012-10-03
  • 打赏
  • 举报
回复
Quartz
huntor 2012-10-03
  • 打赏
  • 举报
回复
j.u.Timer/j.u.TimerTask 就是一个渣。应该废弃不用。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧