gpt4 book ai didi

java - 我是否需要在 future.get(); 之后使用 threadPool.awaitTermination

转载 作者:行者123 更新时间:2023-11-30 03:55:38 24 4
gpt4 key购买 nike

我正在使用 ExecutorService 创建线程池。添加所有任务后,线程池关闭。

现在是 Future.get() 的 Java 文档说

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

我无法理解“如果需要”部分。 future.get()方法什么时候等待以及等待多长时间?如果要等到线程执行结束,是否还需要threadPool.awaitTermination?

ExecutorService threadPool = Executors.newFixedThreadPool(numberOfThreads);
List<Future<?>> futureObjList = new ArrayList<Future<?>>();
for (int i = 0; i < numberOfThreads; i++) {
...
Future<?> future = threadPool.submit(myThread);
futureObjList.add(future);
...
}
threadPool.shutdown();

for(Future<?> future : futureObjList){
try {
future.get();
} catch (Exception e1) {
//if any thread fails, all other thread should stop their execution.
threadPool.shutdownNow();
}
}

try {
threadPool.awaitTermination(Long.MAX_VALUE, TimeUnit.MILLISECONDS);
} catch (InterruptedException e1) {
throw e1;
}

最佳答案

“如果需要”只是意味着 get() 方法可能会阻塞或不阻塞,具体取决于 RunnableCallable< 中发生的事情 是否已经完成。

假设您将 Callable 提交给执行程序服务。 Callable 需要 2 秒才能执行。

如果您在提交后 1 秒调用 get()get() 将再阻塞 1 秒。但是,如果您在提交后 5 秒调用 get(),则 get() 不会阻塞并立即返回。

关于java - 我是否需要在 future.get(); 之后使用 threadPool.awaitTermination,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23267889/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com