日期:2014-05-17  浏览次数:20701 次

TimeTask执行任务,会连续执行两次。求各位救我下!!
java网站,用的struts2,tomcat。后台用TimeTask执行自动推送任务。昨天发现这个自动任务居然每次执行会连续运行两次。

查了下是不是这个任务在那里启动的两次,也没有。麻烦各位帮我看下。

启动服务的代码:

Timer timer=new Timer();
Calendar target=Calendar.getInstance();
timer.schedule(new         BadDayAutoPushTask(),target.getTime(),5*60*1000/*24*60*60*1000!!!!!!!!!!!!!!!部署时要打开。*/);



id, sendno,开始操作时间,结束操作时间, 操作状态, 用户数, 

1, 1, 2013-06-23 11:30:00, 2013-06-23 11:30:25, 1, 39, 
2, 2, 2013-06-23 11:30:00, 2013-06-23 11:30:24, 1, 39, 
3, 3, 2013-06-24 11:30:05, 2013-06-24 11:30:36, 1, 41, 
4, 4, 2013-06-24 11:30:05, 2013-06-24 11:30:36, 1, 41, 
5, 5, 2013-06-25 11:30:00, 2013-06-25 11:30:44, 1, 72, 
6, 6, 2013-06-25 11:30:00, 2013-06-25 11:30:44, 1, 72, 
javaservlet?TimeTask Java Tomcat Struts

------解决方案--------------------
看看问题是不是在BadDayAutoPushTask的实现上。
------解决方案--------------------
你在 BadDayAutoPushTask() 的任务里面本身也要控制好只有当 BadDayAutoPushTask() 全部执行完了,才允许执行下一次调度。

例如:可以加入 synchronized () 来控制,不管有多少个线程调用,或不管是不是任务计划设置错了,你都应该让程序必须一个一个来执行。
------解决方案--------------------
这种问题debug很容易解决,时间不应该浪费在论坛求解上。