由于线程被await方法阻塞了,所以只有等到countdown方法使得state=0的时候才会被唤醒,我们来看看countdown做了什么

1. 只有当 state 减为 0 的时候,tryReleaseShared 才返回 true, 否则只是简单的 state = state - 1

2. 如果state=0, 则调用doReleaseShared 唤醒处于await状态下的线程

public final boolean releaseShared(int arg) { if (tryReleaseShared(arg)) { doReleaseShared(); return true; } return false;
} 

用自旋的方法实现 state 减 1

protected boolean tryReleaseShared(int releases) { // Decrement count; signal when transition to zero for (;;) { int c = getState(); if (c == 0) return false; int nextc = c-1; if (compareAndSetState(c, nextc)) return nextc == 0; }
} 

CountDownLatch.countDown相关推荐

  1. CountDownLatch之countDown()放在子线程的方法里

    CountDownLatch典型用法1:某一线程在开始运行前等待n个线程执行完毕.将CountDownLatch的计数器初始化为n new CountDownLatch(n) ,每当一个任务线程执行完 ...

  2. Java并发编程之CountDownLatch、CyclicBarrier和Semaphore

    前言 本文为对CountDownLatch.CyclicBarrier.Semaphore的整理使用 CountDownLatch CountDownLatch类位于java.util.concurr ...

  3. 一文搞懂 CountDownLatch 用法和源码!

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! CountDownLatch 是多线程控制的一种工具,它被 ...

  4. CountDownLatch的实现分析

    CountDownLatch CountdownLatch 是 JDK 并发包中提供的并发工具类,其允许一个或多个线程等待其他线程完成操作.常用作将一个任务拆分成多个子任务同时执行,只有子任务都执行完 ...

  5. CycliBarriar和CountdownLatch(计数器)

    CyclicBarrier可以重复使用,而CountdownLatch不能重复使用. countDownLatch这个类使一个线程等待其他线程各自执行完毕再执行. 是通过一个计数器来实现的,计数器的初 ...

  6. java并发编程同步器 Semaphore、CyclicBarrier、Exchanger、CountDownLatch

    为什么80%的码农都做不了架构师?>>>    一.Semaphore(信号量) 注解:信号量,其实就是定义一定的数量,只有释放一个才能进去下一个,其余都得进入等待状态.比如有2个洗 ...

  7. Java并发编程-CountDownLatch

    2019独角兽企业重金招聘Python工程师标准>>> 1. 应用场景 CountDownLatch是并发包中用来控制一个或者多个线程等待其他线程完成操作的并发工具类.现以工作中的一 ...

  8. JUC之CountDownLatch的源码和使用场景分析

    最近工作不饱和,写写文章充充电.何以解忧,唯有Coding.后续更新的文章涉及的方向有:ThreadPoolExecutor.Spring.MyBatis.ReentrantLock.CyclicBa ...

  9. 死磕Java并发:J.U.C之并发工具类:CountDownLatch

    作者:chenssy 来源:Java技术驿站 在上篇博客中介绍了Java四大并发工具一直的CyclicBarrier,今天要介绍的CountDownLatch与CyclicBarrier有点儿相似. ...

最新文章

  1. java mqtt 断开连接,可以将MQTT Paho客户端断开连接吗?
  2. 网页前端套java数据_【java】网页/移动前端需要的数据,最好一个接口包含所有数据么?...
  3. Android自定义控件(特效二) 点击屏幕,根据所点击的位置绘制桃心
  4. 用qss 来控制qlabel显示字体的位置_Word表格总填不好,这些技巧轻松来拯救
  5. url主机域名可以省略_从输入url到页面完成加载发生了什么
  6. Spring properties定义bean
  7. MyBitis(iBitis)系列随笔之五:多表(一对多关联查询)
  8. ROS Nodelet使用
  9. Windows中的字体映射关系
  10. Docker镜像使用详解
  11. LabVIEW安装第三方VISA软件后NI VISA失效
  12. 经理人必看的10个管理网站
  13. 关于设计思维的理解与思考
  14. 免费stm32视频教程分享:心率检测仪的设计与实现
  15. 用PS做手机计算机,功能与电脑ps相媲美的手机画画软件
  16. 王道数据结构课代表 - 考研数据结构 第三章 栈和队列 究极精华总结笔记
  17. 非华为电脑多屏协同安装最新的电脑管家
  18. Dynamics 365 CRM 接入统一身份认证平台(单点登录集成)
  19. DPDK — 安装部署
  20. 技术视角看行业SaaS

热门文章

  1. Visual Studio Code(VS code)介绍
  2. pmd代码安全扫描工具
  3. Java学习笔记--继承和多态(下)
  4. VMware8.0虚拟机中安装Ubuntu12.04使用NAT设置连接网络
  5. Genymotion中文手册
  6. SQL Server里的 ISNULL 与 Oracle 中的 NULLIF
  7. JS打开新窗口的代码window.showModalDialog()
  8. 机器学习算法中的概率方法
  9. 2008 noip 传纸条
  10. SpringBoot-AOP切面处理