0
我有一个任务每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在下一次预定执行之前完成它的任务呢?
如果你想_cancel_' Updater'如果还没有完成,你可以使用'scheduleAtFixedRate'返回的'Future'并使'Updater'对取消非常敏感(注意中断的状态当前线程)。 –
你会解释更多的未来部分,如果updater没有完成任务,我会取消更新并分配更多的时间来执行此任务的时间乘以一个因子? –
您是否试图确保2个'Updater'作业不能同时运行? – Gray