作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在Java程序中,我必须启动n个线程,每个线程执行一个操作。所有这些线程继续并行运行。我必须监视已完成操作的线程数,以便以百分比标记操作的进度。
我能想到的唯一方法是轮询整个线程数组并不断检查它们的状态,除非所有节点都已完成执行。然而,这是对CPU的浪费,他们还有其他可能的方法来实现这一点吗?
最佳答案
简单。让每个线程(或每个线程的 Runnable
)在完成时增加一个共享的 AtomicInteger
实例。
其他替代方案包括:
Semaphore
或CountdownLatch
wait()
和notify()
。但是要小心。如果您使用此计数器来确定所有线程是否已完成,您还需要处理线程由于未捕获的异常而终止的情况。您可以使用未捕获的异常处理程序来做到这一点。
关于java - 如何计算java中完成的线程数而不轮询线程状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6772329/
我是一名优秀的程序员,十分优秀!