java并发之CyclicBarrier(通俗易懂)


文章目录

  • 一:简介
    • (1):官方解释
    • (2):通俗解释
      • a:CountDownLatch()
      • b:CyclicBarrier()
  • 二:小demo


一:简介

(1):官方解释

  • 说到简介那就非得拿他和countdownlatch()进行比较讨论了
  • CountDownLatch是一个同步的辅助类,允许一个或多个线程,等待其他一组线程完成操作,再继续执行。
  • CyclicBarrier是一个同步的辅助类,允许一组线程相互之间等待,达到一个共同点,再继续执行。

(2):通俗解释

a:CountDownLatch()

  • 这个就好比一个倒计时锁,调用countdown()方法计数器减一,在计数器减为0之前,其他线程就被阻塞住。
  • 场景: 我们在玩LOL英雄联盟时会出现十个人不同加载状态,但是最后一个人由于各种原因始终加载不了100%,于是游戏系统自动等待所有玩家的状态都准备好,才展现游戏画面。

b:CyclicBarrier()

  • 这个就好比一扇 等到固定人数 才会开的门,这个里面每来个线程调用await()方法,那么固定人数减一 直到减为0的话,这扇门开了,所有线程执行,然后再锁上门,并把这个固定人数重置为初始值 等下一波人

二:小demo


public class TextCyclicBarrier {public static void main(String[] args) throws BrokenBarrierException, InterruptedException {CyclicBarrier barrier = new CyclicBarrier(2);ExecutorService service = Executors.newFixedThreadPool(2);for (int i = 0; i < 2; i++) {service.submit(()->{System.out.println("task1....开始等待其他线程");try {barrier.await();} catch (BrokenBarrierException e) {e.printStackTrace();} catch (InterruptedException e) {e.printStackTrace();}System.out.println("task1...开始执行");//模拟业务场景try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("task1...执行完毕");});service.submit(()->{System.out.println("task2....开始等待其他线程");try {barrier.await();} catch (InterruptedException e) {e.printStackTrace();} catch (BrokenBarrierException e) {e.printStackTrace();}System.out.println("task2...开始执行");try {Thread.sleep(100);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("task2...执行完毕");});}service.shutdown();}
}

这里我们用了for循环是模拟这个栅栏我们是可以重复使用的,就是我们可以重置我们的门口的固定人数。
在这里插入图片描述

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

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

相关文章

BeetleX之简单HTTP/HTTPS实现

在通讯应用中很多时候需要和已有标准的应用协议进行通讯&#xff0c;针对这情况就要针对相应协议的实现&#xff1b;标准协议上考虑的情况比较多&#xff0c;所以协议的复杂度也相对高些&#xff0c;对比之前的Protobuf通讯的简单协议来说则会复杂。接下来用组件去实现一个简单…

体验.NET5 RC1极致性能,你也要“卧槽”!

“ 9月14日&#xff0c;.NET5发布了(Release Candidate)RC1版本&#xff0c;是11月正式版本之前两个RC版本中第一个&#xff0c;包含语言新版本C#9和F#5&#xff0c;需要用Visual Studio 2019 (v16.8, Preview 3)才能使用&#xff0c;注意不是Visual Studio 2019&#xff0c;二…

leetcod383. 赎金信

一:题目 二:上码 class Solution { public:bool canConstruct(string ransomNote, string magazine) {unordered_map<char,int>m;for (auto ch:ransomNote) {m[ch];}for (auto ch: magazine) {if(m.find(ch) ! m.end() && m[ch] > 0) m[ch]--;//当magazine中的…

马斯克推崇的第一性原理,究竟有多重要?

职场&认知洞察 丨 作者 / findyi这是findyi公众号的第79篇原创文章最近&#xff0c;第一性原理这个原本离大众很远的物理概念&#xff0c;被媒体炒的火热。第一性原理最开始是由亚里士多德提出来的。他认为任何一个系统都有一个「第一性原理」。他说&#xff1a;“在每个系…

Gartner 组织世界BI大会,PowerBI 与 Tableau 同台竞技

日前&#xff0c;Gartner 组织了全球顶级 BI 产品大会&#xff0c;由于疫情影响&#xff0c;只能远程举办。官方网址如下&#xff1a;https://blogs.gartner.com/rita-sallam/2020/09/11/bi-bake-off-goes-virtual/该会议的原文为&#xff1a;BI Bake-Off&#xff0c;含义为&am…

leetcode15. 三数之和(详解)

一:题目 二:上码 class Solution { public:/**思路:1.这个题出其不意之处在于,其先对这个序列进行了排序排序的好处是1>:如果首元素是大于0的,那么如果无论无何也凑不出02>:同时我们也把相同的元素凑成一块了 可以方便去重了2.接下来,我们就是利用双指针 来处理 数据是否…

BeetleX之TCP消息通讯Protobuf/TLS

在网络通讯应用中直接操作数据流是比较繁琐的事情&#xff0c;毕竟在业务层面处理的都是对象化消息&#xff1b;为了让网络数据操作变得更友好直观&#xff0c;一般都会引用序列化组件来处理网络流和对象之前的转换工作&#xff1b;在这里介绍组件如何使能Protobuf进行数据交互…

leetcode18. 四数之和

一:题目 二:上码 class Solution { public:/**思路:1.这个跟三数之和差别在于本题加了一层循环,就是我们将第二层循环加在了我们遍历的第一个元素的后面2.其他跟三数之和解题思路一样*/vector<vector<int>> fourSum(vector<int>& nums, int target) {vec…

面试 .NET 开发​,为什么也要考算法?​

最近有不少人面试&#xff0c;我发现很多候选人&#xff0c;聊起架构、框架侃侃而谈&#xff0c;但一写代码&#xff0c;就暴露真实水平。说白了&#xff0c;还是基本功不够扎实。在我看来&#xff0c;所有基本功中&#xff0c;最核心的一定是数据结构与算法。也因此&#xff0…

leetcode344. 反转字符串

一:题目 二:上码 class Solution { public:/**思路:利用双指针来进行处理*/void reverseString(vector<char>& s) {for (int i 0,j s.size()-1; i < j; i,j--) {swap(s[i],s[j]);}} };

跟我一起学.NetCore之WebApi接口裸奔有风险(Jwt)

前言撸码需谨慎&#xff0c;裸奔有风险。经常在一些技术交流群中了解到&#xff0c;还有很多小伙伴的项目中Api接口没有做任何安全机制验证&#xff0c;直接就裸奔了&#xff0c;对于一些临时项目或是个人小项目还好&#xff0c;其余的话&#xff0c;建议小伙伴们酌情考虑都加上…

leetcode541. 反转字符串 II

一:题目 二:上码 class Solution { public:/**思路:1.这个我们需要利用到一个库函数 reverse(nums.begin(),nums.end()); // 将字符串反转那么将局部字符串的反转reverse(nums.begin(),nums.begin()2);//表示的是下标左闭右开的 [0,2)2.还有就是在处理每隔2*k这个问题上 我们选…

你是个失败者,有什么资格说话?

这是头哥侃码的第219篇原创这次十一长假&#xff0c;想必有不少朋友和我一样&#xff0c;跟家人聚在一起&#xff0c;吃个饭&#xff0c;喝点小酒&#xff0c;或者吃吃甜点&#xff0c;喝喝下午茶&#xff0c;“享受” 着在疫情严峻形式下难得的宁静时光。两天前&#xff0c;为…

leetcode151. 颠倒字符串中的单词(思路+详解)

一:题目 二:上码 class Solution { public:/**思路:1.去空格(字符串首部的空格 字符串中间的空格 字符串尾部的空格)1>:这里的话 我们就用到了双指针去空格 fastindex遇见空格直接跳过当fastindex遇不见空格&#xff0c;就将值赋值给fastindex;2.字符串反转3.将单词反转*/…

Azure 内容审查器之羞羞图审查

上一篇 Azure 内容审查器之文本审查我们已经介绍了如果使用Azure进行文字内容的审核。对于社区内容&#xff0c;上传的图片是否含有羞羞内容也是需要过虑的。但是最为一般开发者自己很难实现这种级别的智能识别。但是借助Azure的内容审查器可以分分钟实现它。创建内容审查器在使…

在springboot项目中 static中的 style.css加载不出来

一:问题展示 二:问题解决 404问题你就记住 绝逼是路径出了问题 我以前的写法 报错 修改之后的&#xff1a;可以正常显示

聊一聊mongodb中的 explain 和 hint

看到explain和hint的时候&#xff0c;第一个想到的就是mysql&#xff0c;确实&#xff0c;这就是在mysql中借鉴过来的&#xff0c;既然是借鉴过来的&#xff0c;我想大家都知道这两个关键字的用处&#xff0c;话不多说&#xff0c;速速观看~~~一&#xff1a;explain演示 1. 构建…

leetcode28. 实现 strStr()

一:题目 二:上码 class Solution { public:/**思路:1.KMP算法,主要处理的是字符串匹配的问题2.这里边需要用到next数组 也就是前缀表;那么我们为什么要用前缀表呢&#xff0c;当我们进行匹配字符的时候发现匹配到不相同的字符的时候,那么我们就需要在匹配字符串中查询前一个字符…

Blazor 火了,不禁让人想起已死的Silverlight !

Blazor 火了&#xff0c;Blazor是.NET on browser在开放标准下的一次全新尝试&#xff0c;也将是C#成为全平台全栈语言的最后一块拼图。技术上基于Xamarin团队正在开发的一套运行在wasm上的CLR实现。目前Blazor最直接的受益者还是那些想要做前端的C#开发者&#xff0c;有熟悉的…

xshell过期怎么办

一&#xff1a;问题展示 二:问题的解决 如果我们是出于学习的目的的话&#xff0c;那么我们就可以下载家庭版学生版的免费版本 下载地址:https://www.xshell.com/zh/free-for-home-school/ 然后就等着人家给你发邮件就行了 发完邮件点击里面的链接