ExecutorService waitTermination 卡住了

发布于 2024-11-29 07:13:54 字数 534 浏览 1 评论 0原文

我使用 Executors.newFixedThreadPool(2) 创建了一个固定大小的线程池,并执行了 10 个 Runnable 对象。我设置断点并跟踪执行过程。但是,即使所有任务都已完成,fixedSizeThreadPool.awaitTermination() 也不允许我继续。

基本上:

ExecutorService fixedThreadPool = Executors.newFixedThreadPool(2);
for (int i = 0; i < 10; ++i) {
    fixedSizeThreadPool.execute(myRunables[i]);
}
try {
    fixedSizeThreadPool.awaitTermination(timeout, timeoutUnits);
} catch (Exception e) { }
System.out.println("done!");

但这总是卡在 awaitTermination 上。怎么了?

I made a fixed size thread pool with Executors.newFixedThreadPool(2), and I executed 10 Runnable objects. I set breakpoints and traced through the execution. However, fixedSizeThreadPool.awaitTermination() does not allow me to continue even though all the tasks are done.

Basically:

ExecutorService fixedThreadPool = Executors.newFixedThreadPool(2);
for (int i = 0; i < 10; ++i) {
    fixedSizeThreadPool.execute(myRunables[i]);
}
try {
    fixedSizeThreadPool.awaitTermination(timeout, timeoutUnits);
} catch (Exception e) { }
System.out.println("done!");

But this always gets stuck on awaitTermination. What's wrong?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

堇年纸鸢 2024-12-06 07:13:55

您还可以使用 ExecutorService#invokeAll。它会阻塞,直到所有任务完成或达到超时。如果您的 ExecutorService 包含其他任务以及特别是计划任务,那么它比使用 shutdown 更干净一些。这些也会受到调用 shutdown 的影响。

You could also use ExecutorService#invokeAll. It blocks until all tasks are done or the timeout is reached. It's a little cleaner than using shutdown, if your ExecutorService contains other tasks as well especially scheduled tasks. These would also be affected by a call to shutdown.

泛泛之交 2024-12-06 07:13:54

正如 Peter 指出的,必须首先调用 shutdown()

来源: javadoc

As Peter pointed out, shutdown() must be called first.

source: javadoc

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文