并发编程之CountDownLatch和CyclicBarrier的详细解析(带小案例)

news2024/11/29 19:52:01

CountDownLatch

倒计时锁存器 用来解决线程执行次序的问题

  • CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,这些线程会阻塞。

  • 其它线程调用countDown方法会将计数器减1(调用countDown方法的线程不会阻塞),

  • 当计数器的值变为o时,因await方法阻塞的线程会被唤醒,继续执行。

下面例子中,主线程‘班长’需要等子线程全部执行完成再执行,但是出现了如下情况:

运行结果:

代码:

public class CountDownLatchDemo {
    public static void main(String[] args) {
        for (int i = 0; i < 6; i++) {
            new Thread(()->{
                System.out.println("离开了教室");
            },i+"").start();
        }
​
        System.out.println("班长关门走人");
    }
}

解决方法:使用CountDownLatch

运行结果:

代码:

public class CountDownLatchDemo {
    public static void main(String[] args) throws InterruptedException {
        CountDownLatch countDownLatch = new CountDownLatch(6);
        for (int i = 0; i < 6; i++) {
            new Thread(()->{
                System.out.println("离开了教室");
                countDownLatch.countDown();
            },i+"").start();
        }
        countDownLatch.await();
        System.out.println("班长关门走人");
​
    }
}

CyclicBarrier

---------------------(循环屏障)

和上面的CountDownLatch(做减法倒计时开始任务)不同,CyclicBarrier是做加法来开始任务的

运行结果:

代码:

public class CyclicBarrierDemo {
    public static void main(String[] args) {
        CyclicBarrier cyclicBarrier = new CyclicBarrier(7, ()->{
            System.out.println("召唤神龙");
        });
​
        for (int i = 0; i < 7; i++) {
            int temp = i;
            new Thread(()->{
                try {
                    System.out.println("集齐第"+temp+"颗龙珠");
                    cyclicBarrier.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (BrokenBarrierException e) {
                    e.printStackTrace();
                }
            },i+"").start();
        }
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1556045.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

B096-docker版jenkins环境搭建

目录 Jenkins持续集成工具的介绍Jenkins安装过程案例 tips&#xff1a;ssm项目需要放到tomcat中运行&#xff0c;springboot项目不需要&#xff0c;内置有tomcat&#xff0c;可直接命令行运行 Jenkins持续集成工具的介绍 Jenkins安装过程 docker版Jenkins需要先安装docker环境…

三个对象组练习.java

题目&#xff1a;定义数组存储3部汽车对象&#xff1b;汽车属性&#xff1a;品牌&#xff0c;价格&#xff0c;颜色&#xff1b;创造3个汽车对象&#xff0c;数据通过键盘录入而来&#xff0c;并把数据存储到数组当中 分析&#xff1a; 在main&#xff08;&#xff09;里面定义…

npm ERR! errno CERT_HAS_EXPIRED

1 问题描述 使用npm命令安装相关依赖报错&#xff1a;npm ERR! code CERT_HAS_EXPIRED npm ERR! errno CERT_HAS_EXPIRED npm ERR! request to https://registry.npm.taobao.org/vue%2fcli failed, reason: certificate has expired报错示例图如下所示&#xff1a; 2原因分析…

实验室开放项目实验报告-01

实验室开放项目实验报告 实验名称&#xff1a;实验一输入输出格式 实验目的&#xff1a;熟练掌握程序设计竞赛中通常采用的输入输出格式和掌握不同格式输入输出数据的处理方法 实验内容&#xff1a; 在本地电脑中新建一个文件夹&#xff0c;用于存放C源程序&#xff0c;文件…

学习鸿蒙基础(9)

目录 一、鸿蒙国际化配置 二、鸿蒙常用组件介绍 三、鸿蒙像素单位介绍 四、鸿蒙布局介绍 1、Row与Column线性布局 2、层叠布局-Stack 3、弹性布局 4、栅格布局 5、网格布局 一、鸿蒙国际化配置 base目录下为默认的string。en_US对应美国的。zh_CN对应中国的。新增一个s…

[RAM] 图解 RAM 结构原理

主页&#xff1a; 元存储博客 文章目录 前言1. Channel2. Dimm3. Rank4. Bank5. Row6. Column7. Beat8. Burst Length总结 前言 从CPU至DRAM晶粒之间依据层级由大至小为channel>DIMM>rank>chip>bank>row/column。 图片来源&#xff1a; 电脑王 DRAM层级关系 DR…

应急响应靶机训练-Linux1题解

前言 接上文&#xff0c;应急响应靶机训练Linux1 靶机地址&#xff1a; 应急响应靶机-Linux(1) 最近感冒了&#xff0c;就没录视频版。 题解 目标&#xff1a;3个flag以及黑客的ip地址 登陆虚拟机 密码defend flag1: su history flag{thisismybaby} flag2&#xff1a;…

AI Agent智能应用从0到1定制开发 (包含全部教学视频和全部源码,附链接)

链接分享&#xff1a;https://pan.baidu.com/s/1Cjk-MNDY4DYQKvNI1L4Tzg?pwd3vcd 提取码:3vcd 全部教学视频和全部源码链接分享在下方。 第1章&#xff1a;多模型强应用&#xff1a;AI2.0时代应用开发者机会 在AI2.0时代&#xff0c;应用开发者面临着前所未有的机遇。这一章…

盘点最适合做剧场版的国漫,最后一部有望成为巅峰

最近《完美世界》动画官宣首部剧场版&#xff0c;主要讲述石昊和火灵儿的故事。这个消息一出&#xff0c;引发了很多漫迷的讨论&#xff0c;其实现在已经有好几部国漫做过剧场版&#xff0c;还有是观众一致希望未来会出剧场版的。那么究竟是哪些国漫呢&#xff0c;下面就一起来…

源支付 V7 版,150购买,需要的下载研究,拿走回复

源支付 V7 版&#xff0c;150购买&#xff0c;需要的下载研究,拿走回复 来自站长论坛搬砖&#xff0c;站长论坛搬砖&#xff0c;站长论坛搬砖&#xff0c;站长论坛搬砖&#xff0c;下载地址在最后 请按官方教程配置&#xff0c;专为个人站长打造的聚合免签系统&#xff0c;拥有…

视频监控平台和视频接入网关,支持HTTPS实现视频浏览和录像回放

目录 一、https协议介绍 &#xff08;一&#xff09;什么叫https &#xff08;二&#xff09;https的工作原理 &#xff08;三&#xff09;https和http的区别 二、视频监控平台为何要采用https &#xff08;一&#xff09;采用HTTPS浏览视频的好处体现在以下几个方面&…

手撕算法-跳跃游戏

描述 分析 如果某一个作为 起跳点 的格子可以跳跃的距离是 3&#xff0c;那么表示后面 3 个格子都可以作为 起跳点可以对每一个能作为 起跳点 的格子都尝试跳一次&#xff0c;把 能跳到最远的距离 不断更新如果可以一直跳到最后&#xff0c;就成功了 代码 class Solution {…

使用Leaflet.rotatedMaker进行航班飞行航向模拟的实践

目录 前言 一、Leaflet的不足 1、方向插件 2、方向控制脚本说明 二、实时航向可视化实现 1、创建主体框架 2、飞机展示 3、位置和方位模拟 三、成果及分析 1、成果展示 2、方向绑定解读 总结 前言 众所周知&#xff0c;物体在空间中的运动&#xff08;比如飞行、跑步…

【JAVA】Idea 右侧的gradle 不见了

1. 找到项目的build.gradle 文件&#xff0c;右键 2. 找到“Link Gradle Project”选项 3. 右侧就出现了gradle

通过node 后端实现颜色窃贼 (取出某个图片的主体rgb颜色 )

1.需求 我前端轮播图的背景色 想通过每一张轮播图片的颜色作为背景色 这样的话 需要通过一张图片 取出图片的颜色 这个工作通过前端去处理 也可以通过后端去处理 前端我试了试 color-thief 的插件 但是 这个插件是基于canvas 的模式来的 我需要在小程序中使用这个插件 而且是…

大规模云存储展望|2024逐步复苏,2025全面恢复

SSD以其高速度和低延迟等优点&#xff0c;尤其在容量增长和每GB成本降低方面&#xff0c;SSD的增长速度预计将超过近线硬盘&#xff08;Nearline HDD&#xff09;。尽管HDD在大容量存储方面仍有一定优势&#xff0c;但由于SSD在访问速度、能耗及体积等方面的突出表现&#xff0…

macOS系统配置RUST开发环境

打开rust语言官方网,然后点击马上开始: Rust 程序设计语言 配置RUST开发环境: 使用curl下载rust安装脚本: 复制到终端执行: curl --proto =https --tlsv1.2 -sSf https://sh.rustup.rs | sh 输入: y 选择默认安装,输入: 1

在ubuntu上搭建系统监控系统

大纲 数据生产方安装和运行验证 数据收集、存储和分发方下载和解压修改配置运行验证 数据消费方下载和运行验证新增数据源新增看板关联看板和数据源效果展现 参考资料 在一个监控系统中&#xff0c;一定会有“数据生产方”和“数据消费方”存在。“数据生产方”用于产出需要监控…

wiztree免费的c盘清理软件

现如今&#xff0c;我们无论是工作还是学习&#xff0c;都已经离不开电脑了&#xff0c;经常使用电脑就会导致电脑的“垃圾”越来越多&#xff0c;从而导致磁盘爆红。 相信大家多多少少都体会过这大红的压迫感吧&#xff0c;想清理但是不敢删&#xff0c;不清理吧软件用不了&a…

pnpm、monorepo分包管理、多包管理、npm、vite、前端工程化、保姆级教程

浅尝pnpm monorepo 多包管理方案 &#x1f4a1;tips: 创建pnpm monorope多包管理框架流程 初始化 mkdir taurus & cd taurus pnpm init创建基础文件 创建文件pnpm-workspace.yaml packages:- packages/**创建文件夹packages/ -packages/ -package.json -pnpm-workspace…