在我的主流程中,我有一个线程池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。
答案 0 :(得分:0)
如果你调用所有你的Callables,你会得到一个与你的Callables对应的Futures列表。有了Futures,您可以通过yourFutureList.get(futureOfInterestIndex)来完成Callables是否已完成.isDone()