依存関係を持つオブジェクトを作成しようとしています。つまり、ExecutorService を持つクラスと、Runnables を生成するクラスは異なります。簡単な抽象化は次のとおりです。
public class Main {
private ExecutorService pool; // Initialized before executing main
public static void main(String[] args) {
List<Batch> batches = // fetching...
for(Batch batch : batches) {
Runnable r = batch.getRunnable();
pool.submit(r);
}
}
}
public class Batch {
public Runnable getRunnable() {
Runnable r1 = // creating...
Runnable r2 = // creating...
// FIXME: demand that r2 run after r1 finishes
return // something suitable. r1? r2? or new Runnable?
}
}
これらのクラスが 1 つの場合、以前は CompletableFuture を使用していました。
CompletableFuture.runAsync(r1, pool)
.thenRunAsync(r2, pool)
.exceptionally(ex -> { // Do something });
しかし、今pool
は別のクラスに存在します。CompletableFuture クラスのドキュメントをもっと見ていますが、それが役立つかどうかはまだわかりません。
この辺に詳しい人いませんか?