在我的主要流程中,我有一个线程池 ExecutorService,我用“已知”数量的 Callables 填充它,我调用All()。
还有另一个名为“globalPool”的 ExecutorService 对象(我认为 ExecutorService 是线程安全的,我可以从不同的线程向它添加任务)。
现在,上述每个 Callables 都会生成新任务并将它们(提交)到这个共享的“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);
正如我所见,Callables 将在Runable结束之前结束。