Java使用另一个线程检查线程的状态

标签 java multithreading

我有一个程序,其中一堆线程执行某些任务。我想知道所有这些线程何时完成,以便我可以利用它们的结果做一些其他事情。我不想使用诸如 Thread.join 之类的东西。我更喜欢的是另一个线程检查所有这些线程,当它看到它们完成时,它会执行一些特殊任务。关于如何做到这一点有什么想法吗?

最佳答案

实际上,阻塞更容易实现,更可靠,并且不会引入任何额外的开销/延迟。如果您不想使用 join(),请考虑 CountDownLatch ,它允许您等待一组线程。

另一种更令人愉快的方法是 ExecutorService轻质包裹ExecutorCompletionService .

这两种方法都可以以非阻塞方式使用,例如只是偷看而不是阻塞并等待结果。但为了不浪费 CPU 周期,有一个单独的后台线程阻塞并等待结果,并在所有工作线程完成后立即发送一些事件。

或者让每个工作线程在完成时发送一个事件。一旦接收到的事件数量达到启动的工作线程数量,接收这些事件的对象就会知道处理已完成。与ListenableFuture从 Guava 中,您甚至可以避免额外的看门狗线程。

关于Java使用另一个线程检查线程的状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13000446/

相关文章:

java - 尝试切换到(使用)数据库时出现 JDBC "Error in MySQL Syntax"

java - SD卡中的二维数组太慢

java - Swingworker 产生重复输出/输出无序?

java - 多线程真的是并发运行还是内联运行(一个接一个)

c++ - 为什么我不能使用 tbb::task_scheduler_init 创建超过 32 个线程?

java - 将整数值插入哈希表时出现 ArrayIndexOutOfBoundsException

java - 为什么 MOXy JAXB 编码为空字符串而 JAXB 引用实现却没有?

c# - 事件队列无法正常工作 winforms

c - 在线程中使用时,recvfrom() 对于 RAW 套接字返回 -1?

java - Seam3/Weld - 找不到实体管理器