在Java程序中,我必须启动n个线程,每个线程执行一个操作。所有这些线程继续并行运行。我必须监视已完成操作的线程数,以便以百分比标记操作的进度。
我能想到的唯一方法是轮询整个线程数组并不断检查它们的状态,除非所有节点都已完成执行。然而,这是对CPU的浪费,他们还有其他可能的方法来实现这一点吗?
最佳答案
简单。让每个线程(或每个线程的 Runnable
)在完成时增加一个共享的 AtomicInteger
实例。
其他替代方案包括:
- 使用
Semaphore
或CountdownLatch
- 使用回调;例如使用事件和事件监听器
- 使用
wait()
和notify()
。
但是要小心。如果您使用此计数器来确定所有线程是否已完成,您还需要处理线程由于未捕获的异常而终止的情况。您可以使用未捕获的异常处理程序来做到这一点。
关于java - 如何计算java中完成的线程数而不轮询线程状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6772329/