并发编程-18AQS同步组件之 CyclicBarrier 同步屏障
文章目录
- J.U.C脑图
- CyclicBarrier
- CyclicBarrier的应用场景
- 示例
- await
- await(long timeout, TimeUnit unit)
- CyclicBarrier(int parties, Runnable barrierAction)
- CyclicBarrier和CountDownLatch的区别
- 代码
J.U.C脑图
CyclicBarrier
CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier)。它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门,所有被屏障拦截的线程才会继续运行。
当某个线程调用了await方法之后,就会进入等待状态,并将计数器-1,直到所有线程调用await方法使计数器为0,才可以继续执行,由于计数器可以重复使用,所以我们又叫它循环屏障。
CyclicBarrier默认的构造方法是CyclicBarrier(int parties),其参数表示屏障拦截的线程数量,每个线程调用await方法告诉CyclicBarrier我已经到达了屏障,然后当前线程被阻塞。
CyclicBarrier的应用场景
CyclicBarrier可以用于多线程计算数据,最后合并计算结果的应用场景
示例
await
输出:
await(long timeout, TimeUnit unit)
为了防止await无限阻塞进程,我们可以设置await的超时时间
运行日志:
CyclicBarrier(int parties, Runnable barrierAction)
CyclicBarrier还提供一个更高级的构造函数CyclicBarrier(int parties,Runnable barrierAction)
,用于在线程到达屏障时,优先执行barrierAction,方便处理更复杂的业务场景
输出:
CyclicBarrier和CountDownLatch的区别
CountDownLatch的计数器只能使用一次。而CyclicBarrier的计数器可以使用reset()方法重置。所以CyclicBarrier能处理更为复杂的业务场景,比如如果计算发生错误,可以重置计数器,并让线程们重新执行一次。
CountDownLatch主要用于实现一个或n个线程需要等待其他线程完成某项操作之后,才能继续往下执行,描述的是一个或n个线程等待其他线程的关系,而CyclicBarrier是多个线程相互等待,知道满足条件以后再一起往下执行。描述的是多个线程相互等待的场景
CyclicBarrier还提供其他有用的方法,比如getNumberWaiting方法可以获得CyclicBarrier阻塞的线程数量。isBroken方法用来知道阻塞的线程是否被中断。
代码
https://github.com/yangshangwei/ConcurrencyMaster
并发编程-18AQS同步组件之 CyclicBarrier 同步屏障相关推荐
- Java同步组件之CyclicBarrier,ReentrantLock
文章目录 Java同步组件概况 `CyclicBarrier`介绍 与`CountDownLatch`比较 相同点 不同点 `CountDownLatch`和`CyclicBarrier`的场景比较 ...
- Java7并发编程指南——第二章:线程同步基础
Java7并发编程指南--第二章:线程同步基础 @(并发和IO流) Java7并发编程指南第二章线程同步基础 思维导图 项目代码 思维导图 项目代码 GitHub:Java7ConcurrencyCo ...
- Java并发编程进阶——多线程的安全与同步
多线程的安全与同步 多线程的操作原则 多线程 AVO 原则 A:即 Atomic,原子性操作原则.对基本数据类型变量的读和写是保证原子性的,要么都成功,要么都失败,这些操作不可中断. V:即 vola ...
- 并发编程 | Netty - [常用组件概要]
INDEX Bootstrap & ServerBootstrap Channel Future & ChannelFuture Selector ChannelHandler Pip ...
- Java并发编程的艺术(八)——闭锁、同步屏障、信号量详解
1. 闭锁:CountDownLatch 1.1 使用场景 若有多条线程,其中一条线程需要等到其他所有线程准备完所需的资源后才能运行,这样的情况可以使用闭锁. 1.2 代码实现 // 初始化闭锁,并设 ...
- Java高并发编程:定时器、互斥、同步通信技术
笔记摘要 这里分析了多线程的一些细节问题,并介绍了传统定时器的创建,同时实现了根据自己的调度计划的自定义定时器,对于传统互斥技术中发现的内部类问题,进行了分析,最后对于同步通信技术,是重点,分析了如何 ...
- Java 多线程和并发编程:(二)线程同步 Lock 锁
线程同步 Lock 锁 1.Lock 锁 2.步骤 3.Lock 与 synchronized 的区别 1.Lock 锁 Lock 锁:对需要上锁的地方上锁 JDK1.5 后新增的功能 与 Synch ...
- 【Java并发编程实战14】构建自定义同步工具(Building-Custom-Synchronizers)
JDK包含许多存在状态依赖的类,例如FutureTask.Semaphore和BlockingQueue,他们的一些操作都有前提条件,例如非空.任务已完成等. 创建状态依赖类的最简单的房就是在JDK提 ...
- Java并发编程系列学习_CountDownLatch倒计时器CyclicBarrier循环栅栏
一.倒计时器CountDownLatch 在多线程协作完成业务功能时,有时候需要等待其他多个线程完成任务之后,主线程才能继续往下执行业务功能,在这种的业务场景下,通常可以使用Thread类的join方 ...
最新文章
- 取没有date的邮件发送时间
- Delphi Android下包含第三方DEX
- JAVA语言基础-面向对象(方法重写概述及其应用)
- Pytorch-OpCounter: Pytorch平台计算模型#Parameters和FLOPS的工具包
- python 判断某个字符是否为中文
- 检测相机视野中的物体运动并用Mask显示
- 中国地图3D立体效果
- 以前的java游戏平台_手机游戏平台java游戏经典的五款游戏回顾!
- PxCook安装文件有问题处理办法
- 4-20mA电流光纤中继器的原理和应用
- 消息队列返回错误:Resource temporarily unavailable
- 双旦七大行业营销活动方案
- 【bWAPP】XSS通关记录
- 解决Ubuntu18.04下VMware开启虚拟网络编辑器无反应
- 动态gif图是什么?如何快速制作动态gif?
- 【转】Subsonic的添加和更新、删除操作
- Windows 文件共享
- 系统启动时显示“NTLDR is missing”而无法进入系统的解决方法
- enfp工具箱怎么用_5个很少人知道的黑科技工具箱,功能奇妙,一个顶十个用
- 灵声科技获数千万元 A 轮融资,由北极光创投投资...
热门文章
- risc-v 操作系统教程
- 【加速实践】番外篇:numbajit
- CMake的几种Include
- 目标检测 nms非极大抑制算法
- sklearn.naive_bayes
- python发展前景怎么样-python发展前景怎么样
- 16. Leetcode 845. 数组中的最长山脉 (数组-同向双指针-快慢指针)
- ESIM (Enhanced LSTM for Natural Language Inference)
- windows10上为jupyter notebook切换指定conda环境
- R语言应用实战-聚类分析以及k-means的优缺点