我的应用程序中有以下方法,看起来工作正常......但我不确定它是怎么回事......
ArrayList arr = new ArrayList();
Collection<Future<?>> futures = new LinkedList<Future<?>>();
RestCallThread thread = null;
HttpHeaders header = getAuthHeader(authorization);
for (String ids : IDS) {
thread = new RestCallThread(ids, header);
futures.add(executor.submit(thread));
}
for (Future<?> future : futures) {
try {
arr.add(future.get());
} catch (InterruptedException | ExecutionException e) {
e.printStackTrace();
}
}
return arr;
在代码中,RestAPI调用被添加到ThreadPoolExecutor并等待结果..
我的问题是因为该方法基于线程如何在所有API线程完成之前不执行return语句...
任何返回语句的机会都会返回空列表吗?
答案 0 :(得分:3)
我的问题是因为该方法基于线程如何在所有API线程完成之前不执行return语句...
阅读Future#get()
上的JavaDoc:
如果需要等待计算完成,然后检索其结果。
这意味着循环被阻塞,直到当前迭代的未来得到它的结果,即当循环结束时你知道所有线程都已完成。
任何返回语句的机会都会返回空列表吗?
是的,例如如果IDS
为空或者所有线程都因异常而失败。