java barrier_Java并发类CyclicBarrier方法详解
Cyclic是周期的意思,Barrier是关卡的意思。CyclicBarrier不仅有CountDownLatch的功能,还可以实现屏障等待,即阶段性同步。因此适用于,需要循环地实现线程一起做任务的目标。
CyclicBarrier允许一组线程相互等待,直到到达某个公共屏障点,如果某些进程需要实时地相互等待,就可以使用CyclicBarrier。CyclicBarrier的重点在于,任何一个线程没有完成任务,其他所有的线程都必须等待,即,同类相互等待。
CyclicBarrier的计数是加法操作。
new CyclicBarrier(5, new
Runnable(){})设置最大为5个同行者,当线程个数等于同行者数目时,即只有5个线程,则5个线程都执行了cbRef的await()方法后,才会走到run()方法内,然后每个方法再各自继续执行。否则这些线程彼此相互等待,一直阻塞。
当线程个数大于partier(同行者)数量时,凑齐同行者数量个线程的await后,就会走到run方法内,凑齐的方法也会各自继续执行。之后再次凑齐,会再执行一遍run方法,各自继续执行。从而实现分批进行。当循环执行时,到达屏障点一同执行的线程组合是可能是随机的。
CyclicBarrier具有屏障重置性。当凑齐同行者数目后,使用getNumberWaiting()方法可以看到,等待数量变为0.再来一个同行者,等待数目就会变成n-1。
isBroken()方法查询此屏障是否处于损坏状态。如果其中一个进程因为出现异常而中断,不会影响其他进程的执行和等待,但是,如果用Thread的interrupt()方法进行中断,则所有的线程都会抛出BrokenBarrierException异常。也就是说,CyclicBarrier类对现成的中断处理,会使用全有、或者全无的破坏模型。即,有一个线程因为超时或中断提前离开了屏障点,其他所有在屏障点等待的线程也会抛出异常并离开屏障点。
await(long timeout,
TimeUnit unit)如果在指定时间内达到parties的数量则继续运行,否则抛出超时异常。
getParties()屏障对象的parties个数。
getNumberWaiting()在屏障处等待的线程个数。
reset()重置屏障。屏障被重置后,如果有线程在等待parties,会出现Broken异常。
示例代码https://github.com/whitefancy/OJproblems/tree/master/javaconcurrent/cyclicbarrier
参考文档
《Java并发编程
核心方法与框架》(高洪岩)
java barrier_Java并发类CyclicBarrier方法详解相关推荐
- java的String类源码详解
java的String类源码详解 类的定义 public final class Stringimplements java.io.Serializable, Comparable<String ...
- java多线程中的join方法详解
java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...
- Android之TelephonyManager类的方法详解
林计钦-JAVA java技术群:127834248 博客园 首页 社区 新随笔 联系 订阅 管理 随笔-105 评论-24 文章-0 trackbacks-0 Andr ...
- 好程序员Java学习路线分享finalize()方法详解
好程序员Java学习路线分享finalize()方法详解,前言,finalize()是Object的protected方法,子类可以覆盖该方法以实现资源清理工作,GC在回收对象之前调用该方法.. fi ...
- java处理字符串Patter与Matcher类与其方法详解
1.使用Patter与Matcher类 Pattern 类表示编译的正则表达式. 使用 Pattern 类的静态方法 compile() 获取 Pattern 类引用. 以下代码段用于创建 Patte ...
- Java中Unsafe类的原理详解与使用案例
点击关注公众号,利用碎片时间学习 1 概述 本文基于JDK1.8. Unsafe类位于rt.jar包,Unsafe类提供了硬件级别的原子操作,类中的方法都是native方法,它们使用JNI的方式访问本 ...
- java semaphore 等待时间_一个java同步工具类Semaphore的详解
Semaphore是java并发包里面的一个工具类,我们限制可以访问某些资源的线程数目就可以使用Semaphore了.这篇文章将对Semaphore的概念和使用进行一个详解. 一.概念理解 官方是这样 ...
- arraylist java 排序_Java ArrayList排序方法详解
由于其功能性和灵活性,ArrayList是 Java 集合框架中使用最为普遍的集合类之一.ArrayList 是一种 List 实现,它的内部用一个动态数组来存储元素,因此 ArrayList 能够在 ...
- Java中的类(基础详解)
文章目录 可以有多个类,但只能有一个public类 类 = 字段+方法 类的构造函数 我们没写构造函数的时候 如果我们自己写了构造函数 构造函数中 this 的使用 类的修饰符 / 控制符 第一类:= ...
最新文章
- HDU 2833 WuKong
- “羊贵妃”没走“牛魔王”又来?牛肉价格屡创新高
- c# 配置文件App.config操作类库
- 美萍系统服务器密码,从得到美萍计费管理专家管理员密码开始
- fatal error C1083: 无法打开包括文件:“stdint.h”: No such file or directory
- 真正优秀的人是如何度过假期的
- FPGA-08FPGAVGA彩条显示
- linux 关闭系统自动更新,Linux下如何关闭自动更新
- 调和级数 java,再探π^2/6
- 织梦建站教程dedecms标签调用大全【经典教程】
- Bootstrap系列之表单(Forms)
- 根据身份证号回填信息
- golang中关于读写锁、互斥锁的理解
- Excel的二级级联以及多级级联的实现
- 实现企业微信引流的三大思路
- Quick-cocos2d-x 与COCOS2DX 区别
- 聊聊Dubbo3.0新特性之应用级服务发现
- Python3基础教程
- BloomFilter
- 操作系统--进程锁算法1(两个进程的锁)
热门文章
- ASP.NET Core 5 在IIS,Nginx,Caddy下的性能测试
- 使用 gRPCurl 调试.NET 5的gPRC服务
- 如何在 ASP.NET Core 中 自定义中间件
- 从零开始内建你的安全测试流程
- 面向接口编程,你考虑过性能吗?
- Magicodes.IE基础教程之导出Pdf
- 利用obfuscar对.NET应用进行混淆
- .NET CORE(C#) WPF简单菜单MVVM绑定
- Asp.Net Core 单元测试正确姿势
- NET Core 3.0 AutoFac替换内置DI的新姿势