0

在我的主要流程中,我有一个线程池 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结束之前结束。

4

1 回答 1

0

如果你调用所有你的 Callables 你会得到一个与你的 Callables 相对应的期货列表。使用该期货,您可以通过 yourFutureList.get(futureOfInterestIndex).isDone() 简单地查看 Callables 是否已完成

于 2013-06-05T11:11:29.083 回答