转载自 非常有用的并发控制-循环栅栏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相关推荐

  1. 信号量semaphore 读写锁ReadWriteLock 倒计时器CountDownLatch 循环栅栏 CyclicBarrier 线程阻塞工具类LockSupport...

    信号量semaphore    允许多个线程同时访问 读写锁ReadWriteLock   在频繁的读写耗时中,读之间不阻塞 倒计时器CountDownLatch    obj = new Count ...

  2. 【高并发】JUC中的循环栅栏CyclicBarrier的6种使用场景

    1.概述 转载:添加链接描述 2.CyclicBarrier简介 CyclicBarrier通常称为循环屏障.它和CountDownLatch很相似,都可以使线程先等待然后再执行.不过CountDow ...

  3. Java并发编程系列学习_CountDownLatch倒计时器CyclicBarrier循环栅栏

    一.倒计时器CountDownLatch 在多线程协作完成业务功能时,有时候需要等待其他多个线程完成任务之后,主线程才能继续往下执行业务功能,在这种的业务场景下,通常可以使用Thread类的join方 ...

  4. CyclicBarrie(循环栅栏)的作用与用法

    CyclicBarrie的作用与用法 一.CyclicBarrie的作用 CyclicBarrier循环栅栏(循环屏障)是一个多线程同步的辅助工具类,它允许一组线程在到达某个等待屏障点(common ...

  5. 同步工具之CyclicBarrier循环栅栏

    CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier).它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门, ...

  6. CyclicBarrier: 循环栅栏

    CyclicBarrier是另外一种多线程并发控制工具.和CountDownLatch非常类似,它也可以实现线程间的计数等待,但它的功能比CountDownLatch更加复杂且强大. CyclicBa ...

  7. 倒计时器CountDownLatch 和 循环栅栏:CyclicBarrier

    一 概念: 1.在多线程协作完成业务功能时,有时候需要等待其他多个线程完成任务之后,主线程才能继续往下执行业务功能,在这种的业务场景下,通常可以使用Thread类的join方法,让主线程等待被join ...

  8. 循环计数_倒计数器:CountDownLatch | 循环栅栏:CyclicBarrier

    倒计数器:CountDownLatch CountDownLatch 从名字就可以看出其作用:初始化一个计数,然后每次递减,直至为0,然后触发一个动作.只有一个带参构造器: CountDownLatc ...

  9. Java多线程编程-(6)-两种常用的线程计数器CountDownLatch和循环屏障CyclicBarrier

    前几篇: Java多线程编程-(1)-线程安全和锁Synchronized概念 Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性 Java多线程编程-(3)-线程本地Th ...

最新文章

  1. idea缩写快捷键_IDEA快捷键大全 快速页面重构
  2. Android SDK更新的问题
  3. mysql-5.7.37-winx64解压版安装超详细图文教程
  4. java lambda 表达式中的双冒号和箭头的用法 ::
  5. 微信小程序official-account组件的使用及样式设置
  6. MYSQL 的集群
  7. [开源 .NET 跨平台 Crawler 数据采集 爬虫框架: DotnetSpider] [三] 配置式爬虫
  8. python编程是啥-什么是Python
  9. 记录红米k40解BL、Root、装XPOSED
  10. win ollvm环境_【Win】Stata 14 安装教程
  11. Java基础篇---练习:类的设计
  12. MySQL错误Got error -1 from storage engine
  13. LiveNVR安防监控直播中无插件web直播方案中实现快照抓取的功能
  14. 产品升级|10月产品捷报频传,解锁更多新成就!
  15. java 小程序 自己学习
  16. 鲲鹏Arm64 openEuler 虚拟机学习
  17. android实现可暂停/继续的计时器
  18. 人工神经网络设计选择题,人工神经网络设计原则
  19. oppo 手机侧滑快捷菜单_OPPO又搞什么鬼?离奇上弹、侧滑第二屏!
  20. i3 10100f对比i7 4790k哪个好

热门文章

  1. [PAT乙级]1020 月饼
  2. bigdecimal 平均数_MapReduce实例-必须用Combine--求平均数
  3. 递归算法(二)-分治法
  4. fit、transform与fit_transform
  5. B-树、B+树、B*树详解
  6. python 学习中遇到的问题(持续更新中)
  7. AtCoder Regular Contest 064
  8. cf1208E. Let Them Slide
  9. P7520-[省选联考 2021 A 卷]支配
  10. P3462-[POI2007]ODW-Weights【贪心】