CountDownLatch

  • 概念
  • 工作原理
  • 常用方法
  • 使用场景
  • 缺点

概念

CountDownLatch是在jdk1.5的时候引入的,位于java.util.concurrent并发包中,CountDownLatch叫做闭锁.
CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其它线程执行完后再执行.

工作原理

CountDownLatch是通过一个计数器来实现的,计数器的初始化值为线程的数量.每当一个线程完成了自己的任务后,计数器的值相应的减1.当计数器的值减到0时,表示所有的线程都已完成任务,然后在CountDownLatch上等待的线程就可以恢复执行接下来的任务.

常用方法

  1. public CountDownLatch(int count)
    CountDownLatch接收一个int型的参数,表示要等待的工作线程的个数
  2. public void await()
    使当前线程进入同步队列等待,直到计数器的值减到0或者当前线程被中断,当前线程就会被唤醒.
  3. public boolean await(long timeout,TimeUnit unit)
    带超时时间的await()
  4. public void CountDown()
    使计数器的值减1,如果减到了0,则会唤醒所有等待在这个CountDownLatch上的线程.
  5. public long getCount()
    获取CountDownLatch的数值,也就是计数器的值

使用场景

  1. 实现最大的并行性:
    有时我们想同时启动多个线程,实现最大程度的并行性.如果我们创建一个初始计数器为1的CountDownLatch,多个线程在开始执行任务前首先CountDownLatch.await()在这个锁上等待,只需要主线程调用一次CountDown()方法就可以让其它所有等待的线程同时恢复执行.类似于赛跑,将多个线程放到起点,等待发令枪响,然后同时开跑.
  2. 开始执行前等待N个线程完成各自的任务后,进行汇总合并:
    例如,我们需要使用多线程统计完所有的数据之后,做一个汇总,就可以使用CountDownLatch

缺点

CountDownLatch是一次性的,计数器的值只能在构造方法中初始化一次,之后不能再次对其设置值,当CountDownLatch使用完毕后,它不能再次被使用.

Java---CountDownLatch相关推荐

  1. Java—CountDownLatch使用详解

    关注微信公众号:CodingTechWork,一起学习进步. CountDownLatch介绍 CountDownLatch概述 CountDownLatch一般用作多线程倒计时计数器,强制它们等待其 ...

  2. Java CountDownLatch应用

    Java的concurrent包里面的CountDownLatch其实可以把它看作一个计数器,只不过这个计数器的操作是原子操作,同时只能有一个线程去操作这个计数器,也就是同时只能有一个线程去减这个计数 ...

  3. Java+CountDownLatch多任务处理优化

    前言 项目有许多统计的功能,有些统计页面,要展示几个统计的结果,用户通过前台设置相关参数,后台实时统计并返回数据.后台查询正常查询结果是串行的. 最好的用户体验,就是每一个操作都可以实时的展示数据,3 ...

  4. Java CountDownLatch的两种常用场景

    转载请标明出处:http://blog.csdn.net/zhaoyanjun6/article/details/120506758 本文出自[赵彦军的博客] 文章目录 简介 场景1 让多个线程等待: ...

  5. latch.await java有什么作用_java相关:CountDownLatch源码解析之await()

    java相关:CountDownLatch源码解析之await() 发布于 2020-6-18| 复制链接 摘记: CountDownLatch 源码解析-- await(),具体内容如下上一篇文章说 ...

  6. java多线程百米赛跑_JAVA CountDownLatch(倒计时计数器)用法实例

    这篇文章主要介绍了JAVA CountDownLatch(倒计时计数器)用法实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 方法说明: publ ...

  7. CyclicBarrier和CountDownLatch区别

    这两天写多线程时,用到了CyclicBarrier,下意识的认为CyclicBarrier和CountDownLatch作用很像,就翻阅资料查了一下,说一下他们的区别吧 CyclicBarrier和C ...

  8. 多线程面试题_100多线程和Java并发面试问答–最终清单(PDF下载)

    多线程面试题 在这篇文章中,我们将提供有关多线程和Java并发面试问答的综合文章. 编者注:并发始终是开发人员的挑战,编写并发程序可能非常困难. 引入并发时,有很多事情可能会崩溃,并且系统的复杂性会大 ...

  9. 汇总:1. Java基本功

    23种设计模式 http://www.cnblogs.com/maowang1991/archive/2013/04/15/3023236.html 提升Java代码性能和安全性 https://bl ...

  10. 用java的io做一个代码计数器_Java中的程序计数器是什么

    Java中的程序计数器是什么 程序计数器是当前线程正在执行的字节码的地址.程序计数器是线程隔离的,每一个线程在工作的时候都有一个独立的计数器. JAVA虚拟机管理的内存区域图 1.什么是程序计数器? ...

最新文章

  1. 面向对象----封装之proprty
  2. import _winreg:用python操作修改windows注册表
  3. python 预测算法_通过机器学习的线性回归算法预测股票走势(用Python实现)
  4. c4d打开没反应_掌握这3种C4D技巧,线框渲染效果图也就几秒的事
  5. Django Abstract Models使用下划线设置related_name
  6. Boost enable_if库的测试程序
  7. php 武汉海关对接_“双11”临近 海口海关全力备战跨境电商监管高峰
  8. 关于数据库的设计的一点思路
  9. 【每日算法Day 99】你们可能不知道只用20万赢到578万是什么概念
  10. 易到起死回生的背后,谁在指点江山?
  11. FreeSwitch WINDOWS无法支持H264
  12. MinDoc安装指南(v0.12)
  13. SSM用户注册登录案例
  14. 电脑计算机硬盘格式化,教你电脑怎么格式化本地磁盘
  15. 华为交换机配置acl规则
  16. 面试问题总结——关于YOLO系列(三)
  17. 网络流媒体(七)———PTSP
  18. 2012 快速减肥 美女舒淇的懒人减肥法
  19. 清华大学计算机相关夏令营,夏令营报名
  20. 支付宝回调app失败

热门文章

  1. 洞见 SELENIUM 自动化测试
  2. 说得清的Epoll原理
  3. Letter to a newborn son
  4. LLaMA模型文件 (搬运工)
  5. TSP 问题的几种经典建模方式
  6. Google、Facebook的工程师文化到底是什么?
  7. 【OpenCV人脸识别入门教程之二】人脸检测
  8. Android HorizontalScrollView左右滑动
  9. 如何防止破解?MCU加密技术揭秘
  10. DirectShow使用大全