Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java计时器:取消所有错过的执行_Java_Timertask - Fatal编程技术网

Java计时器:取消所有错过的执行

Java计时器:取消所有错过的执行,java,timertask,Java,Timertask,我正在使用 scheduleAtFixedRate(TimerTask task, Date firstTime, long period) 在我的节目里。如果开始时间已过,则会执行在开始时间和当前时间之间错过的所有任务。正如文件所说: 由于上述原因,如果计划的第一次是在过去,那么任何“错过”的执行将被安排为立即“追赶”执行 有什么方法可以阻止这些“赶超”执行吗?我认为最好的方法是使用调度调用: schedule(TimerTask task, long delay, long period

我正在使用

scheduleAtFixedRate(TimerTask task, Date firstTime, long period) 
在我的节目里。如果开始时间已过,则会执行在开始时间和当前时间之间错过的所有任务。正如文件所说:

由于上述原因,如果计划的第一次是在过去,那么任何“错过”的执行将被安排为立即“追赶”执行


有什么方法可以阻止这些“赶超”执行吗?

我认为最好的方法是使用
调度调用:

schedule(TimerTask task, long delay, long period)
并预先计算第一个任务开始所需的延迟。如果所需的开始时间已经过去,只需使用0的延迟。像这样:

long delay = startTime.getTime() - System.currentTimeMillis();
delay = delay < 0 ? 0 : delay;
long delay=startTime.getTime()-System.currentTimeMillis();
延迟=延迟<0?0:延迟;