JUC之CountDownLatch

CountDownLatch是一个同步计数器,它可以保证一些线程全部执行完毕后当前再往下一步执行。

  新建10条线程,每条运行把当前线程的名称添加到list中,最后打印长度。理想情况下list的长度是10,但是由于线程执行时间的不一致,每次运行list的长度都是可变的。CountDownLatch可以为我们很好的解决这个问题。

1:创建计数器为10的CountDownLatch对象:

2:子线程都执行countDown方法

3:当前线程调用await方法进入阻塞状态

每调用countDown方法就相当与计数-1,当计数器的count数值等于0时,调用await阻塞的线程才会释放,如果计数器的count数值不等于0,那阻塞线程将不会被释放


源码解析


内部自定义集成AQS的同步器Sync,构造CountDownLatch对象传入state作为AQS同步器的计数


每次调用countDown方法会通过CAS算法将计数器count数值-1


state==0时调用线程直接下一步,不等于就进入阻塞队列里面。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容