Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在不轮询线程状态的情况下计算java中已完成的线程数_Java_Multithreading_Count_Polling - Fatal编程技术网

如何在不轮询线程状态的情况下计算java中已完成的线程数

如何在不轮询线程状态的情况下计算java中已完成的线程数,java,multithreading,count,polling,Java,Multithreading,Count,Polling,在Java程序中,我必须启动n个线程,每个线程执行一个操作。所有这些线程继续并行运行。我必须监视已完成操作的线程数,以便以百分比表示操作的进度 我能想到的唯一方法是轮询整个线程数组并不断检查它们的状态,除非所有节点都已完成执行。然而,这是CPU的浪费,是他们实现这一点的任何其他可能的方法吗?你可以在线程的run()方法的末尾增加globalAtomicInteger字段。你可以在线程的run()方法的末尾增加globalAtomicInteger字段。简单。让每个线程(或每个线程的Runnabl

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


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

你可以在线程的
run()方法的末尾增加global
AtomicInteger
字段。

你可以在线程的
run()方法的末尾增加global
AtomicInteger
字段。

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

其他备选方案包括:

  • 使用
    信号灯
    倒计时闩锁
  • 使用回调函数;e、 g.使用事件和事件侦听器
  • 使用
    wait()
    notify()

但是要小心。如果使用此计数器来确定是否所有线程都已完成,则还需要处理由于未捕获异常导致线程死亡的情况。您可以使用未捕获的异常处理程序执行此操作。

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

其他备选方案包括:

  • 使用
    信号灯
    倒计时闩锁
  • 使用回调函数;e、 g.使用事件和事件侦听器
  • 使用
    wait()
    notify()


但是要小心。如果使用此计数器来确定是否所有线程都已完成,则还需要处理由于未捕获异常导致线程死亡的情况。您可以使用未捕获的异常处理程序来实现这一点。

您应该阅读本文。它提到了几种可能性及其利弊,并以前面提到的AtomicInteger结束

你应该读这篇文章。它提到了几种可能性及其利弊,并以前面提到的AtomicInteger结束

线程应通过发送完成事件通知监视器。线程应通过发送完成事件通知监视器。