gpt4 book ai didi

java - 如何停止树中的所有线程?

转载 作者:行者123 更新时间:2023-11-30 07:19:09 24 4
gpt4 key购买 nike

如果我在主线程中执行 ExecutorService.shutdownNow() 它不会停止所有线程,但如果我在 Thread1 或 Thread2 中执行 ExecutorService.shutdownNow() 它会杀死其子子线程如何将关机命令级联到最底层?

       Main thread
/ \
/ \
Thread 1 Thread 2
| | | | |
A B C D E

如何杀死主线程中的所有线程?

使用下面的代码片段来创建线程

CompletionService<Object> completionService = new ExecutorCompletionService<Object>(threadExecutor);
List<Future<Object>> futures = new ArrayList<Future<Object>>();
for(MultiThread mt : threadList)
{
futures.add(completionService.submit(mt));
}

while (futures.size() > 0) {
Future f = completionService.take();
futures.remove(f);
try {
Object result = f.get();
System.out.println(result);
} catch (Exception e) {
System.out.println("Caught exception from one task: " + e.getCause().getMessage() + ". shutdown now!");
threadExecutor.shutdownNow();
break;
}
}

如何处理子线程的中断?

最佳答案

立即关闭列出 shutdownNow()基于Javadoc:尝试停止所有正在执行的任务,停止正在等待的任务的处理,并返回正在等待执行的任务的列表。此方法不等待主动执行的任务终止。使用awaitTermination 来做到这一点。

除了尽最大努力尝试停止处理主动执行的任务之外,没有任何保证。 例如,典型的实现将通过 Thread.interrupt() 取消,因此任何无法响应中断的任务可能永远不会终止。

关于java - 如何停止树中的所有线程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37885437/

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