Java并发工具包——CountDownLatch

Java并发工具包——CountDownLatch

感兴趣的朋友希望能留言交流,有好的建议可以提出来,大家一起进步多谢。

这期内容是之前的Zookeeper入门中挖的一个坑,为什么在实现Java连接Zookeeper服务的时候,使用了这个工具类。具体的原因是什么呢?这期文章来详细的解释一下这个类。

简介

CountDownLatch是java在并发场景中一个常用的类,这个类在java1.5版本发布的,为了实现若干线程等待其他线程执行结束之后继续执行。在Java面试中也是比较常考的一个知识点。

应用场景

  • 大文件处理
    大文件分片处理的时候,为了更好的利用资源那么多线程的方式来完成大文件分片的处理,那么主线程通过await的方法来等待各个线程执行完成,然后主线程再进行文件校验等后续操作。
  • 异步服务连接的场景(可以考虑Zookeeper客户端连接的方案)
    参考Zookeeper入门的文章中,服务端连接的方式。
  • 比赛成绩核算程序
    一场比赛成绩的核算需要在各个选手(每个选手可以看成一个线程)都进行完成之后才能核算最后的比赛结果。
  • 任务进度条程序
    一个耗时较长的任务,需要通过异步的方式来完成,而且又需要通过主线程或守护线程来监控各个线程的完成情况,通过这个类实现就比较简单。

使用例子

进度条

ProcessBar

成绩核算

Competition

实现原理

CountDownLatch是使用一个计数器来实现的,计数器的初始值为线程数量。每当一个线程完成了自己的任务后,计数器的值就会减一直到为零时,await的线程才会继续执行。


CountDownLatch

主线程通过await方法阻塞自己,之后其他各个线程的执行完毕后会通知主线程继续执行。
CountDownLatch内部通过一个静态的同步类完成计数功能,这个数字只能通过构造函数在最初创建对象的时候传入,没有其他办法通过外界方法调用进行修改,只能由各个线程中调用countDown方法来实现数量的减一,这样就能保证所有的线程都成功执行之后,主线程才可以继续执行。

常见面试的问题

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

相关阅读更多精彩内容

友情链接更多精彩内容