不明觉厉的 CyclicBarrier
惭愧的要死,简历上写编程两年了,这个都木有见过。。。
以下文字都是出自http://janeky.iteye.com/blog/769965,只是我觉得作者写的最简单了,所以抄下来做笔记,后面可以翻阅
CyclicBarrier “一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。在涉及一组固定大小的线程的程序中,这些线程必须不时地互相等待,此时 CyclicBarrier 很有用。因为该 barrier 在释放等待线程后可以重用,所以称它为循环 的 barrier。
CyclicBarrier 支持一个可选的 Runnable 命令,在一组线程中的最后一个线程到达之后(但在释放所有线程之前),该命令只在每个屏障点运行一次。若在继续所有参与线程之前更新共享状态,此屏障操作 很有用。
我们在学习CountDownLatch的时候就提到了CyclicBarrier。两者究竟有什么联系呢?引用[JCIP]中的描述“The key difference is that with a barrier, all the threads must come together at a barrier point at the same time in order to proceed. Latches are for waiting for events; barriers are for waiting for other threads。CyclicBarrier等待所有的线程一起完成后再执行某个动作。这个功能CountDownLatch也同样可以实现。但是CountDownLatch更多时候是在等待某个事件的发生。在CyclicBarrier中,所有的线程调用await方法,等待其他线程都执行完。
举一个很简单的例子, 今天晚上我们哥们4个去Happy。就互相通知了一下:晚上八点准时到xx酒吧门前集合,不见不散!。有个哥们住的近,早早就到了。有的事务繁忙,刚好踩点到了。无论怎样,先来的都不能独自行动,只能等待所有人
代码如下(参考了网上给的一些教程)
![](http://janeky.iteye.com/images/icon_star.png)
- import java.util.Random;
- import java.util.concurrent.BrokenBarrierException;
- import java.util.concurrent.CyclicBarrier;
- import java.util.concurrent.ExecutorService;
- import java.util.concurrent.Executors;
- public class TestCyclicBarrier {
- public static void main(String[] args) {
- ExecutorService exec = Executors.newCachedThreadPool();
- final Random random=new Random();
- final CyclicBarrier barrier=new CyclicBarrier(4,new Runnable(){
- @Override
- public void run() {
- System.out.println("大家都到齐了,开始happy去");
- }});
- for(int i=0;i<4;i++){
- exec.execute(new Runnable(){
- @Override
- public void run() {
- try {
- Thread.sleep(random.nextInt(1000));
- } catch (InterruptedException e) {
- e.printStackTrace();
- }
- System.out.println(Thread.currentThread().getName()+"到了,其他哥们呢");
- try {
- barrier.await();//等待其他哥们
- } catch (InterruptedException e) {
- e.printStackTrace();
- } catch (BrokenBarrierException e) {
- e.printStackTrace();
- }
- }});
- }
- exec.shutdown();
- }
- }
关于await方法要特别注意一下,它有可能在阻塞的过程中由于某些原因被中断
总结:CyclicBarrier就是一个栅栏,等待所有线程到达后再执行相关的操作。barrier 在释放等待线程后可以重用。
自己的理解:
与CountDownLatch 相比,这里可以复用吧。
不明觉厉的 CyclicBarrier相关推荐
- Java并发编程之CountDownLatch、CyclicBarrier和Semaphore
前言 本文为对CountDownLatch.CyclicBarrier.Semaphore的整理使用 CountDownLatch CountDownLatch类位于java.util.concurr ...
- java并发之同步辅助类CyclicBarrier和CountDownLatch
CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier).它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门, ...
- cyclicbarrier java_Java并发编程之CyclicBarrier和线程池的使用
原标题:Java并发编程之CyclicBarrier和线程池的使用 下面我们来讲述一下线程池和CyclicBarrier的使用和对比. 一.场景描述 有四个游戏玩爱好者玩游戏,游戏中有三个关卡,每一个 ...
- JAVA中的并发工具 -- CountDownLatch、CyclicBarrier、Semaphore
2019独角兽企业重金招聘Python工程师标准>>> CountDownLatch CountDownLatch允许一个或多个线程等待其他线程完成操作. CountDownLatc ...
- LeetCode 1195. Fizz Buzz Multithreaded--并发系列题目--Java 解法--AtomicInteger/CountDownLatch/CyclicBarrier
题目地址:Fizz Buzz Multithreaded - LeetCode Write a program that outputs the string representation of nu ...
- LeetCode 1115. Print FooBar Alternately--多线程并发问题--Java解法--CyclicBarrier, synchronized, Semaphore 信号量
此文首发于我的个人博客:zhang0peter的个人博客 LeetCode题解专栏:LeetCode题解 LeetCode 所有题目总结:LeetCode 所有题目总结 题目地址:Print FooB ...
- Java的CountDownLatch和CyclicBarrier的理解和区别
CountDownLatch和CyclicBarrier的功能看起来很相似,不易区分,有一种谜之的神秘.本文将通过通俗的例子并结合代码讲解两者的使用方法和区别. CountDownLatch和Cycl ...
- java并发编程同步器 Semaphore、CyclicBarrier、Exchanger、CountDownLatch
为什么80%的码农都做不了架构师?>>> 一.Semaphore(信号量) 注解:信号量,其实就是定义一定的数量,只有释放一个才能进去下一个,其余都得进入等待状态.比如有2个洗 ...
- 使用Java辅助类(CountDownLatch、CyclicBarrier、Semaphore)并发编程
在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法 一.C ...
最新文章
- 【原】使用Json作为Python和C#混合编程时对象转换的中间文件
- python tablewidget综合实例_python – 仅通过单击行标题选择QTableWidget行
- 如何控制并发和控制死锁(内含pb的处理要点)
- c语言对称矩阵的压缩存储_【数据结构】对称矩阵及对称矩阵的压缩存储
- Android开发之The application could not be installed: INSTALL_FAILED_VERSION_DOWNGRADE报错
- 一个简单的XML文档例子
- SPOJ MYQ10 (数位DP)
- 隧道凿岩机器人_隧道凿岩机器人的研制
- mysql卸载后重装失败_小筑教育BIM课堂-Revit100问 [第二期] | 软件卸载
- SpringBoot——@Scheduled的自定义周期性线程池解决任务延时执行问题
- 沃尔沃主动召回40万台车,只因一个罕见的问题
- linux环境变量设置和修改
- Shell 脚本语法
- 【18.40%】【codeforces 631D】Messenger
- 你真的懂网络安全行业吗?
- php 工作管理系统,TP-Admin
- 【Windows】Mathpix Snip-公式神器
- Linux下驱动开发
- 吉他“和弦”是什么?
- 基于机智云的智能家用窗户窗帘控制及物联网系统