当前位置: 首页 > news >正文

CountDownLatch原理-(主线程等待子线程结束再执行)

CountDownLatch是共享锁的一种实现,它默认构造 AQS 的 state 值为 count。当线程使用countDown方法时,其实使用了tryReleaseShared方法以CAS的操作来减少state,直至state为0就代表所有的线程都调用了countDown方法。当调用await方法的时候,如果state不为0,就代表仍然有线程没有调用countDown方法,那么就把已经调用过countDown的线程都放入阻塞队列Park,并自旋CAS判断state == 0,直至最后一个线程调用了countDown,使得state == 0,于是阻塞的线程便判断成功,全部往下执行。
在这里插入图片描述

用来进行线程同步协作,等待所有线程完成倒计时。
其中构造参数用来初始化等待计数值,await() 用来等待计数归零,countDown() 用来让计数减一

public static void main(String[] args) throws InterruptedException, ExecutionException {CountDownLatch latch = new CountDownLatch(1);Thread thread = new Thread(() -> {try {Thread.sleep(3000);System.out.println("子线程先执行");} catch (InterruptedException e) {e.printStackTrace();} finally {latch.countDown();}});thread.start();latch.await();System.out.println("主线程");}
http://www.lryc.cn/news/154122.html

相关文章:

  • mybatis源码学习-3-解析器模块
  • 解决微信小程序recycle-view使用百分比单位控制宽高时出现的内容溢出问题
  • 如何使用蚂蚁集团自动化混沌工程 ChaosMeta 做 OceanBase 攻防演练?
  • 在 Node.js 中使用 MongoDB 事务
  • IntelliJ IDEA的远程开发(Remote Development)
  • 网络安全-信息收集简介
  • 页面页脚部分CSS分享
  • 微信小程序slot插槽的介绍,以及如何通过uniapp使用动态插槽
  • l8-d6 socket套接字及TCP的实现框架
  • ChatGPT AIGC 完成动态堆积面积图实例
  • 虹科产线实时数采检测方案——高速采集助力智能化升级
  • 用迅为RK3568开发板使用OpenCV处理图像颜色通道提取ROI
  • 低压配电室电力安全解决方案
  • 【Windows 常用工具系列 11 -- 笔记本F5亮度调节关闭】
  • Python小知识 - 【Python】如何使用Pytorch构建机器学习模型
  • 使用Akka的Actor模拟Spark的Master和Worker工作机制
  • 文心一言api接入如何在你的项目里使用文心一言
  • Python匿名函数lambda(R与Python第五篇)
  • 【2023校园招聘】 钉钉AI应用开发平台开始校招拉~
  • Linux系统gdb调试常用命令
  • Sumo中Traci.trafficlight详解(上)
  • 手写Mybatis:第13章-通过注解配置执行SQL语句
  • spring security - 快速整合 springboot
  • NPM 常用命令(二)
  • ctfhub ssrf(3关)
  • 跨源资源共享(CORS)Access-Control-Allow-Origin
  • 【嵌入式软件开发 】学习笔记
  • CentOS 7上安装Python 3.11.5,支持Django
  • COMPFEST 15H「组合数学+容斥」
  • react快速开始(三)-create-react-app脚手架项目启动;使用VScode调试react