スケジュールされたタスクを一時停止して再開する必要があります。スケジュールされたタスクの一時停止と再開
タスクをキャンセルする()コード例はたくさんありますが、再開/再開する必要があります。
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つのハックは、[シングルスレッド実行プログラム](http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executors.html#newSingleThreadScheduledExecutor--)を使用しています。一時停止条件が偽になるまで待機するタスクを渡します。 – VGR
シングルスレッドエグゼキュータはここではオプションではありません。実行するために長時間実行される数十のプロセスがあり、そのうちのいくつかはかなり長時間実行されています。 – BTakacs