线程池等待所有任务执行完毕
时间: 2023-06-30 18:19:26 浏览: 126
实现线程池等待所有任务执行完毕可以通过使用CountDownLatch来实现。CountDownLatch是Java提供的一个同步工具类,可以用来协调多个线程之间的同步。
具体做法如下:
1. 创建一个CountDownLatch对象,设置初始值为任务数量。
2. 将任务提交到线程池中执行。
3. 每个任务执行完毕时,调用CountDownLatch的countDown()方法,将计数器减1。
4. 在主线程中,调用CountDownLatch的await()方法,等待计数器归零。
5. 所有任务执行完毕后,主线程继续执行。
示例代码如下:
```
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolDemo {
public static void main(String[] args) throws InterruptedException {
int taskCount = 10;
ExecutorService executorService = Executors.newFixedThreadPool(5);
CountDownLatch countDownLatch = new CountDownLatch(taskCount);
for (int i = 0; i < taskCount; i++) {
executorService.execute(() -> {
System.out.println("任务执行中...");
countDownLatch.countDown();
});
}
countDownLatch.await();
System.out.println("所有任务执行完毕");
executorService.shutdown();
}
}
```
在上面的代码中,我们创建了一个包含10个任务的线程池,使用CountDownLatch来等待所有任务执行完毕。当所有任务执行完毕后,输出"All tasks have finished"。注意,CountDownLatch.await()方法会阻塞当前线程,直到计数器归零。
阅读全文