如何在不轮询线程状态的情况下计算java中已完成的线程数
在Java程序中,我必须启动n个线程,每个线程执行一个操作。所有这些线程继续并行运行。我必须监视已完成操作的线程数,以便以百分比表示操作的进度如何在不轮询线程状态的情况下计算java中已完成的线程数,java,multithreading,count,polling,Java,Multithreading,Count,Polling,在Java程序中,我必须启动n个线程,每个线程执行一个操作。所有这些线程继续并行运行。我必须监视已完成操作的线程数,以便以百分比表示操作的进度 我能想到的唯一方法是轮询整个线程数组并不断检查它们的状态,除非所有节点都已完成执行。然而,这是CPU的浪费,是他们实现这一点的任何其他可能的方法吗?你可以在线程的run()方法的末尾增加globalAtomicInteger字段。你可以在线程的run()方法的末尾增加globalAtomicInteger字段。简单。让每个线程(或每个线程的Runnabl
我能想到的唯一方法是轮询整个线程数组并不断检查它们的状态,除非所有节点都已完成执行。然而,这是CPU的浪费,是他们实现这一点的任何其他可能的方法吗?你可以在线程的
run()方法的末尾增加globalAtomicInteger
字段。你可以在线程的run()方法的末尾增加globalAtomicInteger
字段。简单。让每个线程(或每个线程的Runnable
)在完成时增加一个共享的AtomicInteger
实例
其他备选方案包括:
- 使用
信号灯
或倒计时闩锁
- 使用回调函数;e、 g.使用事件和事件侦听器
- 使用
wait()
和notify()
但是要小心。如果使用此计数器来确定是否所有线程都已完成,则还需要处理由于未捕获异常导致线程死亡的情况。您可以使用未捕获的异常处理程序执行此操作。简单。让每个线程(或每个线程的Runnable
)在完成时增加一个共享的AtomicInteger
实例
其他备选方案包括:
- 使用
信号灯
或倒计时闩锁
- 使用回调函数;e、 g.使用事件和事件侦听器
- 使用
wait()
和notify()
但是要小心。如果使用此计数器来确定是否所有线程都已完成,则还需要处理由于未捕获异常导致线程死亡的情况。您可以使用未捕获的异常处理程序来实现这一点。您应该阅读本文。它提到了几种可能性及其利弊,并以前面提到的AtomicInteger结束 你应该读这篇文章。它提到了几种可能性及其利弊,并以前面提到的AtomicInteger结束 线程应通过发送完成事件通知监视器。线程应通过发送完成事件通知监视器。