Мне нужно приостановить и возобновить запланированную задачу.Пауза и возобновление запланированной задачи
Я вижу много примеров кода для отмены() задачи, но мне нужно было бы возобновить ее/перезапустить. Я вижу предложения:
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
}
}
}
... а затем мне нужно запланировать снова, а не перезагружать.
Является ли это ДЕЙСТВИТЕЛЬНО лучшим способом для этого?
Как правило, да, перепланирование вашей задачи - лучший способ сделать это. Один взломан, который приходит на ум, использует [однопоточный исполнитель] (http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executors.html#newSingleThreadScheduledExecutor--) и передавая ему задачу, которая ждет, пока условие паузы не станет ложным. – VGR
Однопоточный исполнитель здесь не вариант: у меня есть десятки длительных процессов для запуска, а некоторые из них довольно длительные. – BTakacs