Java 中的未来相关说明

Future related clarification in Java

我的应用程序中有以下方法,它看起来工作正常..但我不确定它是怎么回事...

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 并等待结果..

我的问题是因为该方法是基于线程的,所以 return 语句是如何在所有 API 线程完成之前不执行的...

return 语句是否有可能 return 空列表?

My Question is Since the approach is based on thread how the return statement is not executed till all the API threads get completed...

阅读 Future#get() 上的 JavaDoc:

Waits if necessary for the computation to complete, and then retrieves its result.

这意味着循环被阻塞,直到当前迭代的未来得到它的结果,即当循环结束时,您知道所有线程都已结束。

Any chance of return statement will return empty list?

是的,例如如果 IDS 为空或所有线程都因异常而失败。