java多线程同时运行,等待任一线程完成后结束所有线程
时间: 2023-10-25 08:06:38 浏览: 34
你可以使用 Java 中的 CountDownLatch 类来实现这个功能。CountDownLatch 是一个同步工具,用于在一个或多个线程等待一组事件发生时等待其他线程。
具体实现方式如下:
1. 创建 CountDownLatch 对象,并将计数器初始化为线程数。
2. 每个线程执行完任务后,调用 CountDownLatch 的 countDown() 方法来减少计数器的值。
3. 在主线程中调用 CountDownLatch 的 await() 方法等待计数器为 0。
4. 当计数器为 0 时,主线程继续执行,结束所有线程。
示例代码如下:
```java
import java.util.concurrent.CountDownLatch;
public class MultiThreadDemo {
public static void main(String[] args) throws InterruptedException {
int threadCount = 10;
CountDownLatch latch = new CountDownLatch(threadCount);
for (int i = 0; i < threadCount; i++) {
new Thread(new Task(latch)).start();
}
latch.await();
System.out.println("所有线程执行完成");
}
static class Task implements Runnable {
private CountDownLatch latch;
public Task(CountDownLatch latch) {
this.latch = latch;
}
@Override
public void run() {
// 执行任务
System.out.println(Thread.currentThread().getName() + "执行任务");
latch.countDown();
}
}
}
```
在上面的示例代码中,创建了 10 个线程并启动,每个线程执行完任务后,调用 CountDownLatch 的 countDown() 方法,计数器减 1,当计数器为 0 时,主线程从 await() 方法中返回,输出 "所有线程执行完成"。