多个线程池集成

时间:2013-06-05 10:50:33

标签: java multithreading threadpool

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

1 个答案:

答案 0 :(得分:0)

如果你调用所有你的Callables,你会得到一个与你的Callables对应的Futures列表。有了Futures,您可以通过yourFutureList.get(futureOfInterestIndex)来完成Callables是否已完成.isDone()