私のメイン フローには、スレッド プール ExecutorService があり、invokeAll() という "既知の" 数の Callable を入れます。
また、「globalPool」と呼ばれる別の ExecutorService オブジェクトがあります (ExecutorService はスレッドセーフであり、別のスレッドからタスクを追加できるという私の主張)。
ここで、上記の Callable のそれぞれが新しいタスクを生成し、それらをこの共有された「globalPool」に配置 (送信) します。
問題は、すべてのタスクがいつ完了したか、および次のタスクがなくなったかどうかを知ることができない (ブロックできない) ことです。
手伝ってください。
コードスニペット:
public class Worker implements Callable {
private ExecutorService sharedPool;
public Worker (ExecutorService pool){
this.sharedPool = pool;
}
public boolean call() {
for (int i = 0; i<100; i++){
if(i % 10 == 0){
sharedPool.submit(new Runnable() {
public void run() {
heavyTaskHere();
}
}
}
}
}
}
Main flow:
ExecutorService sharedPool = new Executors.newFixedThreadPool(X);
List<Callable<Boolean>> mainthareadPool= new ArrayList<Callable<Boolean>>();
ExecutorService executor = Executors.newFixedThreadPool(N);
for (int i = 0; i<10; i++){
Wroker w = new Worker (sharedPool);
mainthareadPool.add(w);
}
executor.invokeAll(mainthareadPool);
私が見ているように、Callable はRunable が終了する前に終了します。