非常有用的并发控制-循环栅栏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。因为一个线程被打断了,即打破了循环栅栏的完整性,导致线程不能到齐其他线程永远不能继续执行,这个异常也就避免了线程永远等待的情况。


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

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

相关文章

一个会定时执行的方法

开发工具与关键技术:Visual Studio、MVC作者:幻奏撰写时间:2019.6.27我们在做项目的时候不是有一些要我们定时完成的任务吗?很多人应该都会用定时器来完成这个任务。我今天要讲的就是如何使用定时器的插件来完成我们今天的任务。 …

VC6.0下载及安装

转自: https://blog.csdn.net/weixin_37536336/article/details/81187963 希望对下载,并学习C语言的朋友,有帮助。 1.绿色版: 网址:https://pan.baidu.com/s/1jN70y8x6-_1XGJHESlMspA 密码:sla5 2.企业…

如何实现下拉框的绑定

开发工具与关键技术:Visual Studio、MVC 作者:幻奏 撰写时间:2019.7.5下拉框你们都见过吧,下拉框的作用是方便用户更快的输入,同时也限制了用户,再也不怕用户乱写啦。 下拉框我们该如何绑定呢,这…

volatile关键字解析~高级java必问

转载自 volatile关键字解析~高级java必问昨天我介绍了原子性、可见性、有序性的概念,那么今天就来见识下这些概念的主角-volatile关键字。volatile基本介绍volatile可以看成是synchronized的一种轻量级的实现,但volatile并不能完全代替synchronized&…

B树、B+树、B*树谈到R 树

转自: https://blog.csdn.net/v_JULY_v/article/details/6530142 从B 树、B 树、B* 树谈到R 树 作者:July、weedge、Frankie。编程艺术室出品。 说明:本文从B树开始谈起,然后论述B树、B*树,最后谈到R 树。其中B树、B树…

一个会定时完成的任务(二)

开发工具与关键技术:Visual Studio、MVC 作者:幻奏 撰写时间:2019.7.5上次我大概说了一下定时任务是如何实现的,由于我只是大概的说了那个插件是如何使用的,它的其他方法我还没和你们细说,所以,…

String.format()方法的使用

转载自 java字符串格式化:String.format()方法的使用常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。熟悉C语言的读者应该记得C语言的sprintf()方法,两者有类似之处。format()方法有两种重载形式。 l form…

转-《高性能mysql》并不是一本好书——SQL笔记

转自: https://book.douban.com/review/8122660/ 版权归作者所有,任何形式转载请联系作者。 作者:姚泽源(来自豆瓣) 来源:https://book.douban.com/review/8122660/ 在知乎上发过一次,这里也发一…

实现模糊查询并忽略大小写

开发工具与关键技术:Visual Studio、MVC 作者:幻奏 撰写时间:2019.7.13我们在实现查询功能的时候,常常会用到模糊查询。这个呀,可是很重要的,当用户输入条件查询时,我们就要显示对应的数据&…

字符串拼接方式

转载自 java提高篇之字符串对于字符串而言我们经常是要对其进行拼装处理的,在java中提高了三种拼装的方法:、concat()以及append()方法。这三者之间存在什么区别呢?先看如下示例: public class StringTest {/*** desc 使用、conca…

用js比较时间大小

开发工具与关键技术:Visual Studio、js 作者:幻奏 撰写时间:2019.7.17对比时间的大小在很多项目里面都有用到,刚开始我还不会怎样比较时间的大小,后来上了老师的课之后,我才知道怎样比较时间的大小。 比较时…

独家:这也许是最具珍藏价值的Oracle DBA生存宝典!

转自: https://dbaplus.cn/news-10-1475-1.html 曾几何时,DBA一度被视为越老越吃香的职业,而从事数据库霸主Oracle的DBA更是风靡多时的技术人择业之选。 但随着Oracle自身技术的不断提升和完善,人手的操作不断被削弱,O…

StringTokenizer的使用

转载自 Java学习笔记--StringTokenizer的使用拓展:Pattern.split替代String.split http://www.cnblogs.com/gnivor/p/4386978.html StringTokenizer是一个用来分隔String的应用类 1. 构造函数。1. StringTokenizer(String str) :构造一个用来…

Post请求如何取消异步

开发工具与关键技术:Visual Studio、post 作者:幻奏 撰写时间:2019.7.22其实关于异步这个问题我还不太懂,因为我还是一只萌新嘛,所以我在做项目时就出现了一个关于异步的问题。 我做的项目是一个客房管理系统&#xff…

Oracle必读好书推荐

转自:https://blog.csdn.net/notbaron/article/details/52305255 Oracle必读好书推荐 -------------------------------------------------------------------------- tkyte的书 1、Expert Oracle Database Architecture: 9i and 10g Programming Techniques and…

如何在linq使用左连接

开发工具与关键技术:Visual Studio、linq 作者:幻奏 撰写时间:2019.7.26我先说一下我的项目吧,上次就已经提过了,我做的是酒店的客房管理系统,首先要实现的是房态图,这个是根据房间的数量来新增…

Maven精选系列--私库搭建及使用

转载自 Maven精选系列--私库搭建及使用为什么要使用私库maven默认去远程中央仓库下载JAR包的,访问国外网络相当慢,如果团队每个人都去下载一遍无疑是网络的浪费,当然也可以添加国内的镜像,如阿里的比较稳定,但如果想添…

学习Oracle 最好的5本书

转自: http://www.goodu.info/gc/node/88 经过精心搜集和统计,这里列出了学习Oracle最好的5本书,从入门到精通从简单理解到高级技巧,涵盖了历年来最佳学习实践经验。快速帮助成为Oracle达人。 都是响当当的作者,响当当…

学好数据库,看这9本书就够了

转自: https://blog.csdn.net/f2006116/article/details/51997820 软件开发者编写代码,最终都是要处理数据,因此数据库是必备技能。 悲剧的是,学校里与此最相关的数据库原理课,对初学者的体验却非常不好。相信很多同学…

SuperMap GIS查询

SuperMap GIS的二次开发是在地图的基础上开发使用一些功能,让人更加方便的使用地图。功能中当然有查询,而查询分类有:1、地图查询 2、数据查询。 地图查询主要针对地图中的数据进行的各类查询:SQL查询、范围查询、距离查询、几何查…