Je dois suspendre et reprendre une tâche planifiée.Mettre en pause et reprendre la tâche planifiée
Je vois beaucoup d'exemples de code pour annuler() une tâche, mais je devrais alors la reprendre/redémarrer aussi. Je vois des suggestions faisant ceci:
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
}
}
}
... et puis j'ai besoin de programmer à nouveau au lieu de redémarrer.
Est-ce VRAIMENT la meilleure façon de le faire?
Généralement, oui, la reprogrammation de votre tâche est la meilleure façon de le faire. Un hack qui vient à l'esprit utilise un [exécuteur single-thread] (http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executors.html#newSingleThreadScheduledExecutor--), et en lui passant une tâche qui attend que la condition de pause soit fausse. – VGR
Exécuteur monothread n'est pas une option ici: J'ai des dizaines de processus de longue durée à exécuter et certains d'entre eux est assez long. – BTakacs