Java并发编程:CountDownLatch实战解析
在多线程编程中,协调线程执行顺序是常见需求。Java的CountDownLatch是一个简单而强大的同步工具,允许一个或多个线程等待其他线程完成操作。
核心机制
CountDownLatch通过计数器实现同步,初始化时指定计数数量。线程调用countDown()方法减少计数,而等待线程调用await()方法阻塞直到计数器归零。
典型应用场景
- 主线程等待所有子线程完成任务后继续执行
- 模拟高并发场景,同时触发多个线程
- 服务启动前的依赖检查
代码示例
public class ServiceInitializer {
private static final int THREAD_COUNT = 3;
private static final CountDownLatch latch = new CountDownLatch(THREAD_COUNT);
public static void main(String[] args) throws InterruptedException {
ExecutorService executor = Executors.newFixedThreadPool(THREAD_COUNT);
for (int i = 0; i < THREAD_COUNT; i++) {
executor.execute(() -> {
try {
// 模拟初始化任务
Thread.sleep(1000);
System.out.println("服务初始化完成: " + Thread.currentThread().getName());
latch.countDown();
} catch (InterruptedException e) {
Thread.currentThread().interrupt();
}
});
}
latch.await();
System.out.println("所有服务初始化完成,开始对外提供服务");
executor.shutdown();
}
}
优势与注意事项
CountDownLatch的优势在于简单易用,但需要注意:计数器不可重置,一旦归零就无法再次使用。对于需要重复使用的场景,可以考虑使用CyclicBarrier。
掌握CountDownLatch能够显著提升多线程程序的协调能力,是Java开发者必备的并发工具之一。