0

这里有一个循环,用于从 A GenericObjectPool 借用对象并在每个循环中提交给 Executor。然后,调用者必须等待所有 Exectuor 完成。

这是目前的代码 -

private ImplClass implObject;
private Future future;

for (Iterator iter = anArrayList.iterator(); iter.hasNext();) {

    //Gets a GenericObjectPool Object
    implObject = (ImplClass) this.getImplPool().borrowObject();

    future = getExecutorServices().submit(implObject);
}


// Wait for Exectuor to complete
while (!future.isDone()) {
    try {
        Thread.sleep(Global.WaitTime());

    } catch (InterruptedException iex) {
    }
}

但这是错误的,因为未来只等待最后一个线程。我应该创建一个期货数组来监控每个执行者吗?

4

2 回答 2

1

这个怎么样?:

List<Callable> tasks = new ArrayList<Callable>();
for (Iterator iter = anArrayList.iterator(); iter.hasNext();) {
    //Gets a GenericObjectPool Object
    implObject = (ImplClass) this.getImplPool().borrowObject();      
    tasks.add(implObject);
}
List<Future<Object>> futures = getExecutorServices().invokeAll(tasks);
于 2013-02-20T15:11:40.280 回答
1

ExecutorService 有一个特定的方法:ExecutorService.invokeAll(tasks)

Ralf 的回答中提到的ExecutorCompletionService也很有帮助 - 它允许您在调用者线程到达时处理结果。

于 2013-02-20T15:17:42.843 回答