java - 如何计算java中完成的线程数而不轮询线程状态

标签 java multithreading count polling

在Java程序中,我必须启动n个线程,每个线程执行一个操作。所有这些线程继续并行运行。我必须监视已完成操作的线程数,以便以百分比标记操作的进度。

我能想到的唯一方法是轮询整个线程数组并不断检查它们的状态,除非所有节点都已完成执行。然而,这是对CPU的浪费,他们还有其他可能的方法来实现这一点吗?

最佳答案

简单。让每个线程(或每个线程的 Runnable)在完成时增加一个共享的 AtomicInteger 实例。

其他替代方案包括:

  • 使用SemaphoreCountdownLatch
  • 使用回调;例如使用事件和事件监听器
  • 使用wait()notify()
<小时/>

但是要小心。如果您使用此计数器来确定所有线程是否已完成,您还需要处理线程由于未捕获的异常而终止的情况。您可以使用未捕获的异常处理程序来做到这一点。

关于java - 如何计算java中完成的线程数而不轮询线程状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6772329/

相关文章:

java - 如何在android中设备方向改变后保持listview项目的高亮

java - 如何检查从 <select> html 字段中选择了哪个 optgroup 和选项

c++ - 为什么使用 openMP 的 VC++ 矩阵时间 vector 比异步更快?

Java - 异步 - 线程池

mySQL SUM 和 COUNT 问题,连接上的一些值加倍

java - 为什么我无法将包从 fragment 传递到 Activity

java - 为什么 JavaFx SceneBuilder 找不到用户定义的类?

java - 可以对线程的这方面进行一些解释

mysql - 我的sql字段总和使用另一个字段来区分然后排序

c++ - 在 C++ 中循环遍历一个数组