非常有用的并发控制-循环栅栏CyclicBarrier
转载自 非常有用的并发控制-循环栅栏CyclicBarrier
昨天我讲了倒计时器CountDownLatch的应用,它是阻塞线程直到计时器归0的一种等待方式。今天讲的这个循环栅栏CyclicBarrier与倒计时器非常类似,但它比倒时器更加强大且稍微复杂,它也是并发控制中非常实用的工具。
循环栅栏CyclicBarrier,从英语字义可以理解为它是可以循环利用的,且栅栏是用来阻止线程在栅栏外等待的,它同样是阻止线程等待,它和CountDownLatch倒底有什么区别呢?
给你出道题,5个线程同时执行,当每个线程都执行了某段代码后再继续往下执行,如果5个线程未到齐,否则其他线程一直等待。
从上面的题目,我们来看下面的例子,理解什么是循环栅栏。
首先CyclicBarrier构造方法接受5个线程数和线程聚齐时的回调线程。什么意思呢?就是当5个线程都调用了await()方法,这5个线程才继续往下执行,执行前先运行到齐时的回调线程。
从例子输出的结果可以看出cb finish先运行的,说明到齐运行了回调线程,再输出了每个线程的耗时,我们控制10个线程来阻塞等待,而循环栅栏只有5个,说明它是可以循环利用的,每到齐5个线程阻塞的线程就继续执行。
需要注意的await方法会抛出异常,一个是中断异常InterruptedException,即是其他线程中断了这个线程,另外一个是BrokenBarrierException,如果1个线程被打断出现InterruptedException,其他等待在循环栅栏外面的线程就会出现BrokenBarrierException。因为一个线程被打断了,即打破了循环栅栏的完整性,导致线程不能到齐其他线程永远不能继续执行,这个异常也就避免了线程永远等待的情况。
非常有用的并发控制-循环栅栏CyclicBarrier相关推荐
- 信号量semaphore 读写锁ReadWriteLock 倒计时器CountDownLatch 循环栅栏 CyclicBarrier 线程阻塞工具类LockSupport...
信号量semaphore 允许多个线程同时访问 读写锁ReadWriteLock 在频繁的读写耗时中,读之间不阻塞 倒计时器CountDownLatch obj = new Count ...
- 【高并发】JUC中的循环栅栏CyclicBarrier的6种使用场景
1.概述 转载:添加链接描述 2.CyclicBarrier简介 CyclicBarrier通常称为循环屏障.它和CountDownLatch很相似,都可以使线程先等待然后再执行.不过CountDow ...
- Java并发编程系列学习_CountDownLatch倒计时器CyclicBarrier循环栅栏
一.倒计时器CountDownLatch 在多线程协作完成业务功能时,有时候需要等待其他多个线程完成任务之后,主线程才能继续往下执行业务功能,在这种的业务场景下,通常可以使用Thread类的join方 ...
- CyclicBarrie(循环栅栏)的作用与用法
CyclicBarrie的作用与用法 一.CyclicBarrie的作用 CyclicBarrier循环栅栏(循环屏障)是一个多线程同步的辅助工具类,它允许一组线程在到达某个等待屏障点(common ...
- 同步工具之CyclicBarrier循环栅栏
CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier).它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门, ...
- CyclicBarrier: 循环栅栏
CyclicBarrier是另外一种多线程并发控制工具.和CountDownLatch非常类似,它也可以实现线程间的计数等待,但它的功能比CountDownLatch更加复杂且强大. CyclicBa ...
- 倒计时器CountDownLatch 和 循环栅栏:CyclicBarrier
一 概念: 1.在多线程协作完成业务功能时,有时候需要等待其他多个线程完成任务之后,主线程才能继续往下执行业务功能,在这种的业务场景下,通常可以使用Thread类的join方法,让主线程等待被join ...
- 循环计数_倒计数器:CountDownLatch | 循环栅栏:CyclicBarrier
倒计数器:CountDownLatch CountDownLatch 从名字就可以看出其作用:初始化一个计数,然后每次递减,直至为0,然后触发一个动作.只有一个带参构造器: CountDownLatc ...
- Java多线程编程-(6)-两种常用的线程计数器CountDownLatch和循环屏障CyclicBarrier
前几篇: Java多线程编程-(1)-线程安全和锁Synchronized概念 Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性 Java多线程编程-(3)-线程本地Th ...
最新文章
- idea缩写快捷键_IDEA快捷键大全 快速页面重构
- Android SDK更新的问题
- mysql-5.7.37-winx64解压版安装超详细图文教程
- java lambda 表达式中的双冒号和箭头的用法 ::
- 微信小程序official-account组件的使用及样式设置
- MYSQL 的集群
- [开源 .NET 跨平台 Crawler 数据采集 爬虫框架: DotnetSpider] [三] 配置式爬虫
- python编程是啥-什么是Python
- 记录红米k40解BL、Root、装XPOSED
- win ollvm环境_【Win】Stata 14 安装教程
- Java基础篇---练习:类的设计
- MySQL错误Got error -1 from storage engine
- LiveNVR安防监控直播中无插件web直播方案中实现快照抓取的功能
- 产品升级|10月产品捷报频传,解锁更多新成就!
- java 小程序 自己学习
- 鲲鹏Arm64 openEuler 虚拟机学习
- android实现可暂停/继续的计时器
- 人工神经网络设计选择题,人工神经网络设计原则
- oppo 手机侧滑快捷菜单_OPPO又搞什么鬼?离奇上弹、侧滑第二屏!
- i3 10100f对比i7 4790k哪个好
热门文章
- [PAT乙级]1020 月饼
- bigdecimal 平均数_MapReduce实例-必须用Combine--求平均数
- 递归算法(二)-分治法
- fit、transform与fit_transform
- B-树、B+树、B*树详解
- python 学习中遇到的问题(持续更新中)
- AtCoder Regular Contest 064
- cf1208E. Let Them Slide
- P7520-[省选联考 2021 A 卷]支配
- P3462-[POI2007]ODW-Weights【贪心】