Ich muss eine geplante Aufgabe pausieren und fortsetzen.Geplante Aufgabe pausieren und fortsetzen
Ich sehe viele Codebeispiele, um eine Aufgabe abzubrechen(), aber ich müsste sie dann auch fortsetzen/neu starten. Ich sehe Vorschläge dabei:
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
}
}
}
... und dann muss ich erneut planen statt neu zu starten.
Ist das wirklich der beste Weg, dies zu tun?
Im Allgemeinen ist eine Neuplanung Ihrer Aufgabe der beste Weg, dies zu tun. Ein Hack, der einem einfällt, benutzt einen [single-thread executor] (http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executors.html#newSingleThreadScheduledExecutor--), und übergibt es eine Aufgabe, die wartet, bis die Pause-Bedingung falsch ist. – VGR
Singlethread-Executor ist hier keine Option: Ich habe dutzende von lang laufenden Prozessen zu laufen und einige von ihnen ist ziemlich langwierig. – BTakacs