java - 如何在 4 个独立线程完成后安排打印语句?

标签 java multithreading loops primes spinning

我有一个简单的java应用程序,它计算素数直到某个用户给定的数字并打印出这些数字。我在此基础上添加了四个独立的线程,它们迭代 4 个独立的数字范围。一旦所有 4 个线程都完成了迭代,我想打印最终的 ArrayList。

我当前收到 ConcurrentModificationException,因为在启动 4 个线程后,下一行代码是 print 语句,该语句试图打印 ArrayList,该 ArrayList 目前正在被至少一个仍处于 Activity 状态的线程修改.

因此,我希望能够在 4 个线程全部死亡后执行 print 语句。此外,我想在不使用旋转循环的情况下执行此操作。我没有什么特别反对使用旋转循环的地方,只是我想有更好的方法来做到这一点,并且我可能必须为 4 个线程分配更大的优先级,以防止旋转循环耗尽大量的线程。 CPU。

最佳答案

使用 CountDownLatch初始化为4;打印线程等待锁存器,工作线程在终止之前对锁存器调用倒计时

如果四个线程同时修改您的ArrayList,请确保正确同步它;您可能想使用ConcurrentLinkedQueue相反(或者为每个线程使用不同的ArrayList)

关于java - 如何在 4 个独立线程完成后安排打印语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16661403/

相关文章:

java - 从非 Activity 开始 Activity

java - Jackrabbit 更新或合并节点

javascript - 太多的递归?

java - spring boot 不映射另一个模块中定义的端点

java - 当 Canvas 表面 View 位于另一个 Canvas 之上时,无法将其圆角化

java - java 8中是否存在并发时发生的liveness failure

java - Android TextView.setText() 在 Thread.sleep() 阻塞之前调用并返回,直到 sleep() 返回。为什么?

java - 如何使用多线程增加java中的 volatile 整数?

loops - 如何在 Twig 循环中连接两个 Twig 变量

Java对如何排列 "if"语句感到困惑