在ThreadPool中等待任何线程可以使用CountDownLatch来实现。CountDownLatch是Java中的一个同步工具类,它可以让一个或多个线程等待其他线程完成操作后再继续执行。
具体步骤如下:
以下是一个示例代码:
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class ThreadPoolExample {
public static void main(String[] args) {
int threadCount = 5; // 线程数量
CountDownLatch latch = new CountDownLatch(threadCount);
ExecutorService executorService = Executors.newFixedThreadPool(threadCount);
for (int i = 0; i < threadCount; i++) {
executorService.execute(new WorkerThread(latch));
}
try {
latch.await(); // 等待所有线程完成任务
System.out.println("所有线程已完成任务");
} catch (InterruptedException e) {
e.printStackTrace();
}
executorService.shutdown();
}
static class WorkerThread implements Runnable {
private final CountDownLatch latch;
public WorkerThread(CountDownLatch latch) {
this.latch = latch;
}
@Override
public void run() {
// 执行任务
System.out.println("线程" + Thread.currentThread().getId() + "正在执行任务");
// 模拟任务耗时
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("线程" + Thread.currentThread().getId() + "任务执行完成");
latch.countDown(); // 任务完成,计数器减1
}
}
}
在上述示例中,我们创建了一个线程池,并使用CountDownLatch来等待所有线程完成任务。每个线程执行任务后,调用countDown()方法将计数器减1。主线程调用await()方法等待计数器减为0,即所有线程完成任务后,主线程被唤醒,输出"所有线程已完成任务"。
腾讯云相关产品和产品介绍链接地址:
领取专属 10元无门槛券
手把手带您无忧上云