我想当天凌晨12点执行任务。 我当前的代码如下:
long currennTime = System.currentTimeMillis();
long stopTime = currennTime + 2000; //provide the 2hrs time it should execute 1000*60*60*2
while(stopTime != System.currentTimeMillis())
{
My task();
}
private static Date getTomorrowMidNight()
{
Calendar c = new GregorianCalendar();
c.set(Calendar.HOUR_OF_DAY, 0); //anything 0 - 23
c.set(Calendar.MINUTE, 0);
c.set(Calendar.SECOND, 0);
Date midnight = c.getTime();
return midnight;
}
public static void startTask(){
Timer_Tasks task = new Timer_Tasks();
Timer timer = new Timer();
timer.schedule(task,getTomorrowMidNight(),1000*10);
}
public static void main(String args[])
{
startTask();
}
任务每24小时保持运行一次,这可能是问题所在?
谢谢
答案 0 :(得分:0)
除了Rashin的评论外,我还建议您不要使用while(stopTime != System.currentTimeMillis())
。那是一个非常具体的条款,该过程可能不会检查确切的毫秒时间。卡在该循环中很容易。
一种更好的方法是检查您的超时时间是否已过去:
long end = System.currentTimeMillis();
long start = System.currentTimeMillis();
long stopTime = start + 2000;
while(end-start<stopTime) {
My task();
end = System.currentTimeMillis();
}
答案 1 :(得分:-1)
另一个选择是使用来自Spring的@Scheduled注释以及所需的CRON表达式对方法进行注释。 例如:
@Scheduled(cron = "0 00 00 * * ?")
public void doSomething() {}
您必须通过在配置中添加@EnableScheduling来在应用程序中启用弹簧调度,以使其起作用。