计时器任务不运行

时间:2010-10-22 21:18:37

标签: java timer

我在我的网络应用程序中使用Timertask每天24小时在午夜启动一次后台线程。所以我有一个ServletContextListener并且在contextInitialized中,我创建了一个Timertask对象timertask(比如说)和一个Timer对象说t。

我打电话

t.schedule(timertask, firstTime.getTime(), rescheduleMiliSec); 

其中firstTime.getTime() = midnightrescheduleMiliSec = 24 hr。 线程启动很好,并在DIT中执行它应该做的事情。每24小时它启动后台任务。

当它移动到PROD时,线程只在初始化上下文时运行一次但在此之后不运行。

是否有可能导致此问题的特定设置?

3 个答案:

答案 0 :(得分:2)

你的TimerTask实现是否可能抛出RuntimeException?

如果不是异常,则在该Timer中调度的某些TimerTask会无限期地阻塞。这是我所知道的唯一可能导致Timer失败的两个条件。

顺便说一句,你可能想看一下ScheduledExecutorService。这是调度任务的更现代的方式。

答案 1 :(得分:1)

我认为原因很简单,但可能会躲避肉眼。

firstTime.getTime() 

以毫秒为单位,以下方法优先:

schedule(TimerTask task, long delay, long period)

预期的内容:

schedule(TimerTask task, Date firstTime, long period)

答案 2 :(得分:0)

在使用TimerTask调度任务后的contextInitialized方法中,下面是否有任何代码,可能导致异常。