暂停并恢复计划任务

时间:2016-10-06 12:54:48

标签: java concurrency scheduled-tasks scheduling

我需要暂停并恢复计划任务。

我看到许多代码示例取消()一个任务,但我还需要恢复/重启它。我看到这样做的建议:

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
        }
    }
}

...然后我需要再次安排而不是重启。

这真的是最好的方法吗?

1 个答案:

答案 0 :(得分:0)

我宁愿重新安排暂停和恢复。不只是因为我不知道如何做到这一点,而且因为暂停的任务可能不会释放他们的线程。在此期间,即使在任务队列中有其他任务等待,这些执行程序线程也会阻塞并且不执行任何操作。

为了不丢失中间结果,您可以将它们放在另一个队列中,这些队列在安排新任务之前被拾取。您还可以基于该队列实现暂停和恢复。