面试官:实战中用过CountDownLatch吗?给我详细说说

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 应用于实际项目中,加深理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值