我需要暂停并恢复计划任务。
我看到许多代码示例取消()一个任务,但我还需要恢复/重启它。我看到这样做的建议:
public void init(){
scheduledTaskExecutor.getScheduledThreadPoolExecutor().setRemoveOnCancelPolicy(true);
}
public void schedule(String id, Runnable task){
ScheduledFuture<?> scheduledFuture = scheduledTaskExecutor.scheduleAtFixedRate(task);
runningTaskRegistry.put(id, task);
}
public void suspend(String id){
ScheduledFuture<?> scheduledFuture = runningTaskRegistry.get(serviceName);
if(scheduledFuture != null){
scheduledFuture.cancel(false);
try{
scheduledFuture.get();
} catch (InterruptedException | ExecutionException | CancellationException e){
// I do not want the currently running task finishing after this point
}
}
}
...然后我需要再次安排而不是重启。
这真的是最好的方法吗?
答案 0 :(得分:0)
我宁愿重新安排暂停和恢复。不只是因为我不知道如何做到这一点,而且因为暂停的任务可能不会释放他们的线程。在此期间,即使在任务队列中有其他任务等待,这些执行程序线程也会阻塞并且不执行任何操作。
为了不丢失中间结果,您可以将它们放在另一个队列中,这些队列在安排新任务之前被拾取。您还可以基于该队列实现暂停和恢复。