一、CountDownLatch,Semaphore的高频问题:
1.1 CountDownLatch是啥?有啥用?底层咋实现的?
CountDownLatch 本质上是一个计数器,用于协调多个线程之间的同步。主要应用场景是在多线程并行处理业务时,需要等待其他线程处理完再进行后续操作,例如合并结果或响应用户请求。
用法:
- 在主线程中创建一个 CountDownLatch 对象,指定计数器的初始值。
- 每个子线程在处理完任务后,调用
countDown
方法将计数器减1。 - 主线程调用
await
方法,等待计数器归零后继续执行。
底层实现:
- 基于 AQS(AbstractQueuedSynchronizer)实现。
- 创建 CountDownLatch 时,指定的数值会赋值给 state 属性。
- 子线程调用
countDown
方法时,state 减1。 - 当 state 归零时,调用
await
方法挂起的线程会被唤醒。
注意:CountDownLatch 不能重复使用,用完即销毁。