CountDownLatch

同步辅助类,它允许一个或多个线程等待其他线程完成操作后再继续执行

- **核心理念:****计数器 + 阻塞**
- **构造器:**

CountDownLatch latch = new CountDownLatch(int count);

count = 需要等待的事件数(或线程数)

使用:latch.await() 这时候线程就会park,并进入q,state++。countdown():try state == 0,里面有个 dorelease,就会for node: q, node即Thread,然后LockSuport.unpark()

底层原理:

还是基于AQS,可见AQS的抽象能力和通用性,

核心就是 计数器归零唤醒所有等待线程

常用场景

常用于我们的一些需要聚合数据的业务场景中,比如前端的一个页面需要多个组件的数据进行聚合,那么这时候就可以使用countDownLatch开多个线程

还有模拟高并发场景,同时唤醒多个请求任务,唤醒这个操作是比较轻量级的,虽然底层是for(T

thread:q)但几乎能做到同时