java如何等待线程池的指定线程结束,才执行主线程
时间: 2023-11-17 17:10:49 浏览: 84
Java简单实现“主线程等待所有子线程完成再继续”
Java中可以使用`CountDownLatch`类实现等待线程池的指定线程结束,才执行主线程。具体步骤如下:
1. 在主线程中创建`CountDownLatch`对象,并将计数器初始化为要等待的线程数量。
```
CountDownLatch latch = new CountDownLatch(threadNum);
```
2. 在每个线程中,在线程执行完后,通过`CountDownLatch`对象的`countDown()`方法将计数器减1。
```
latch.countDown();
```
3. 在主线程中,通过`CountDownLatch`对象的`await()`方法让主线程等待所有线程执行完毕,即计数器为0。
```
latch.await();
```
完整代码示例:
```java
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolTest {
public static void main(String[] args) throws Exception {
int threadNum = 5;
ExecutorService executorService = Executors.newFixedThreadPool(threadNum);
CountDownLatch latch = new CountDownLatch(threadNum);
for (int i = 0; i < threadNum; i++) {
executorService.execute(() -> {
// 执行线程任务
// ...
latch.countDown();
});
}
latch.await(); // 等待所有线程执行完毕
System.out.println("所有线程执行完毕");
executorService.shutdown();
}
}
```
阅读全文