这是从GenericObjectPool借用对象并在每个循环中提交给Executor的循环。然后,调用者必须等待所有Exectuors完成。
这是现在的代码 -
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) {
}
}
但这是错误的,因为未来只等待最后一个线程。我应该创建一个期货数组来监控每个执行者吗?
答案 0 :(得分: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);
答案 1 :(得分:1)
ExecutorService有一个特定的方法:ExecutorService.invokeAll(tasks)
Ralf的回答中提到的ExecutorCompletionService也很有帮助 - 它允许您在调用者线程到达时处理结果。