java - 当没有更多线程处于 Activity 状态时如何跳出循环

标签 java multithreading

我有一个程序,可以在其中初始化并启动可变数量的线程。我需要主程序与线程交互,因此我将它们放入无限循环中。在所有线程都死掉之后,我想要一种方法来打破循环。这是我的部分代码:

public static void main(String[] args) {
//some random initializing

for(int i = 1; i <= num; i++){     //p1 is a Runnable
        Thread t = new Thread(p1, "t"+ Integer.toString(i));
        t.start();
} 
while(true){
//do some stuff while threads are active
//not sure what if statement to put here to break loop
}

如果需要,我可以发布更多代码,但我认为这在很大程度上是无关紧要的。

最佳答案

您可以使用CountDownLatch (自 java 1.5 起)这里,tt 是一种同步辅助工具,它允许一个或多个线程等待,直到其他线程中执行的一组操作完成。

片段:

CountDownLatch signal = new CountDownLatch(num);
...
for(int i = 1; i <= num; i++){     //p1 is a Runnable
        Thread t = new Thread(p1, "t"+ Integer.toString(i),signal);
        t.start();
} 
signal.await();           // wait for all to finish

...在线程的 run() 方法中...

public void run(){
       ...                // do stuff
       signal.countDown(); // sending signal that work has done.
}

关于java - 当没有更多线程处于 Activity 状态时如何跳出循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20392822/

相关文章:

java - 以这种方式在JFrame中定位4个JPanel

sql-server - 我们可以使用单个数据库连接从多个线程同时执行多个数据库选择语句吗?

Java:线程技术和概念

java - RuntimeMXBean 使用 JDK 11 从 jolokia api 查询时,返回 500 内部服务器响应错误

具有四核处理器的笔记本电脑中的 Java 多线程

c++ - 现实生活中是否存在简单的 bool 指针作为线程取消标志不会有效取消线程的情况?

Java 在读取期间写入套接字会导致死锁

Java代理如何处理CONNECT请求

Java:只能由父类(super class)调用的方法

带有自己提示符的 Java 命令行应用程序