/ / Pause et reprise de la tâche planifiée - Java, accès simultané, tâches planifiées, planification

Suspendre et reprendre la tâche planifiée - Java, accès simultané, tâches planifiées, planification

Je dois suspendre et reprendre une tâche planifiée.

Je vois beaucoup d’exemples de code pour annuler une tâche, mais j’aurais besoin de la relancer aussi Je vois des suggestions qui font 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 je dois planifier à nouveau au lieu de redémarrer.

Est-ce vraiment la meilleure façon de faire cela?

Réponses:

0 pour la réponse № 1

Je préférerais reprogrammer plutôt que de faire une pause et de reprendre. Non seulement parce que je ne sais pas comment faire cela, mais aussi parce que les tâches en pause ne libéreront probablement pas leurs threads. Pendant ce temps, les threads de l'exécuteur bloquent et ne font rien même s'il y a d'autres tâches en attente dans la file d'attente.

Pour ne pas perdre les résultats intermédiaires, vous pouvez les placer dans une autre file d'attente, qui est ramassée avant la planification de nouvelles tâches. Vous pouvez également implémenter la pause et la reprise en fonction de cette file d'attente.