1. CountDownLatch 概述
- 作用: 允许多个线程阻塞直到某个条件满足。
- 原理: 基于 AQS(AbstractQueuedSynchronizer)实现,使用计数器控制线程阻塞。
2. 核心方法
- countDown(): 减少计数器的值,每次调用递减 1。
- await(): 阻塞当前线程,直到计数器为 0。
3. 内部实现
- Sync 内部类: 继承 AQS,封装 state 作为计数器。
- 构造器: 初始化计数器,抛出负数异常。
- releaseShared(): AQS 方法,用于减少计数器并唤醒等待线程。
- tryReleaseShared(): 钩子方法,递减计数器,使用 CAS 操作保证原子性。
4. await() 方法详解
- 无参数: 阻塞直到计数器为 0。
- 有参数: 指定最大阻塞时间,超过时间后返回 false。
5. 使用场景
- 场景 1: 倒计时器,等待多个线程完成初始化。
- 场景 2: 并行性控制,多个线程同时开始执行任务。
6. 代码示例
- 示例 1: 创建 CountDownLatch,启动多个线程,主线程等待所有线程完成后执行。
- 示例 2: 初始化 CountDownLatch,多个线程等待发令枪响后同时启动。
7. 实际应用
- 初始化服务: 服务启动时使用 CountDownLatch 等待所有依赖服务就绪。
- 并发任务: 控制任务执行的并发度,如数据库批量插入。
8. 建议
- 阅读源码: 深入理解 CountDownLatch 的实现原理。
- 实践应用: 将 CountDownLatch 应用于实际项目中,加深理解。
1298

被折叠的 条评论
为什么被折叠?



