import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
class BootStrap {
def init = { servletContext ->
def sd = Executors.newSingleThreadScheduledExecutor()
sd.scheduleAtFixedRate(new CriticalTask(), 0, 1, TimeUnit.MINUTES)
}
}
已知CriticalTask
类继承自java.util.TimerTask
类。
CriticalTask类的run方法内部的代码运行正常。但是,调度不起作用。
我不知道这是web.xml配置还是其他问题?
这项工作假定每分钟都会启动。
答案 0 :(得分:2)
如果您使用的是ScheduledExecutorService
,则不需要TimerTask
,事实上,使用TimerTask
可能会因为其混乱的结果而适得其反。它有效,因为TimerTask
实现了Runnable
,但run()
之外的所有其他方法都没有意义。
即。仅当cancel()
与班级Timer
一起使用时,scheduledExecutionTime()
和TimerTask
才有效。
方法ScheduledExecutorService.scheduleAtFixedRate
会返回ScheduledFuture
,其中包含getDelay
和cancel
等可用于控制任务的方法。