我有一个每20秒执行一次的任务。但问题是任务可能会延迟,从而导致中断。
package client;
import java.util.concurrent.ScheduledThreadPoolExecutor;
import static java.util.concurrent.TimeUnit.*;
import java.util.Date;
public class Bootstrap
{
public static void main(String[] args)
{
addThreadsToPool();
ServiceTest service1 = new ServiceTest();
}
public static void addThreadsToPool()
{
ScheduledThreadPoolExecutor eventPool = new ScheduledThreadPoolExecutor(5);
eventPool.scheduleAtFixedRate(new Updater(), 2, 20, SECONDS);
try {
Thread.sleep(20000);
} catch (InterruptedException ignored) {
}
}
}
在这个例子中,类Updater每20秒执行一次,问题是如果updater的执行需要一段时间超过20秒。 那么如何让Updater在下一次计划执行之前完成任务呢?
答案 0 :(得分:0)
除了对Updater进行编码以便在不到20秒的时间内完成,没有别的办法。从严格意义上讲,这是不可能的,因为可能会在CPU上安排线程,可能会发生长时间的GC暂停等。如果在任务中运行循环,它可以定期检查时间并在中止到达截止日期时中止。 / p>