gpt4 book ai didi

java - 多线程异常处理释放资源

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:08:35 25 4
gpt4 key购买 nike

我正在尝试处理多线程问题中生成的所有异常,以消除内存泄漏、中断或执行异常(我不想传播它们)和类似情况。如果我中断线程 (Thread.currentThread().interrupt()),shutdownNow() 在下面的 finally 中是多余的?

ThreadPoolExecutor service = new ThreadPoolExecutor(coreSize, maxSize);

// do stuff

try {
List<Future<?>> futures = new ArrayList<Future<?>>();

for (Item item : items) {
// processing logic
Runnable myTask = new MyTask();
futures.add(service.submit(myTask));
}

for (Future<?> f : futures) {
f.get();
}
} catch (Exception e) {
// todo
} finally {
service.shutdown();
try {
service.awaitTermination(duration, TimeUnit.SECONDS);
} catch (Exception e) {
// todo
Thread.currentThread().interrupt();
} finally {
if (!service.isTerminated()) {
service.shutdownNow();
}
}
}

最佳答案

如果 MyTask 忽略任何中断

shutdownNow 将以与shutdown 相同的方式运行。在这种情况下,是的,shutdownNow 是多余的。

另一方面,如果中断会影响 MyTask,则shutdownNow 是停止工作线程所必需的。

关于java - 多线程异常处理释放资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50037755/

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