Java--CyclicBarrier同步屏障原理,使用
package com; import java.util.Map;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.CyclicBarrier; /**
* Created by yangyu on 16/11/28.
*/ /**
* CyclicBarrier是一个同步屏障
* CyclicBarrier让一个线程达到屏障时被阻塞,直到最后一个线程达到屏障时,屏障才会开门,所有被屏障拦截的线程才会继续执行
* CyclicBarrier(int parties, Runnable barrierAction)构造函数,用于在所有线程都到达屏障后优先执行barrierAction的run()方法
* CyclicBarrier使用场景:
* 可以用于多线程计算以后,最后使用合并计算结果的场景;
*
* 以下列子就是:使用5个线程分别向Map中放置计算好的数据,最后由Action来执行合并结果的功能;
*
* 原理:
* CyclicBarrier中有一个计数器,每当一个线程调用await()方法时计数器就会减1
* 计数器不等于0时,会通过ReentrantLock重入所的condition的await()方法将线程阻塞
* 直到计数器等于0时,会检测是否有barrierAction,如果有则执行barrierAction的run方法,然后唤醒signalAll()所有阻塞线程
* 如果没有barrierAction则直接通过signalAll()唤醒所有阻塞线程
*/
public class TestCyclicBarrier { private static ConcurrentHashMap<String,Integer> map = new ConcurrentHashMap<String, Integer>(); public static void main(String[] args) {
/**
* CyclicBarrier会阻塞5个线程,当5个线程都到达屏障时会优先执行Action的run()方法
*/
CyclicBarrier c = new CyclicBarrier(5,new Action());
for (int i = 0; i < 5; i++) {
new Thread(()->{
/**
* 将计算完成的结果放入Map中
*/
map.put(String.valueOf(Thread.currentThread().getId()),5);
try {
/**
* 被屏障拦截
*/
c.await();
} catch (InterruptedException e) {
e.printStackTrace();
} catch (BrokenBarrierException e) {
e.printStackTrace();
}
}).start();
}
} /**
* 屏障开启后,优先执行Action的run()方法合并结果
*/
private static class Action implements Runnable{ @Override
public void run() {
int j=0;
for (Map.Entry<String,Integer> entry : map.entrySet()){
System.out.println(entry.getValue());
j = j+entry.getValue();
}
System.out.println("j="+j);
}
}
}
Java--CyclicBarrier同步屏障原理,使用的更多相关文章
- java CyclicBarrier同步屏障
CyclicBarrier的字面意思是可循环使用的屏障,它的主要作用是,让一组线程到达一个屏障时被阻塞,知道最后一个线程到达屏障时,屏障才会打开,所有被屏障拦截的线程才会继续运行. 1.简介: Cyc ...
- Java多线程之CountDownLatch和CyclicBarrier同步屏障的使用
转载请注明原文地址:http://www.cnblogs.com/ygj0930/p/6558349.html 一:CountDownLatch CountDownLatch是一个执行 完成任务 ...
- Java核心-多线程-并发控制器-CyclicBarrier同步屏障
1.基本概念 中文译本同步屏障,同样来自jdk并发工具包中一个并发控制器,它的使用和CountDownLatch有点相似,能够完成某些相同并发场景,但是它们却不相同. 2.抽象模型 主要用来实现多个线 ...
- java多线程--同步屏障CyclicBarrier的使用
CyclicBarrier的概念理解: CyclicBarrier的字面上的意思是可循环的屏障,是java并发包java.util.concurrent 里的一个同步工具类,在我下载的JDK1.6的中 ...
- Java CAS同步机制 原理详解(为什么并发环境下的COUNT自增操作不安全): Atomic原子类底层用的不是传统意义的锁机制,而是无锁化的CAS机制,通过CAS机制保证多线程修改一个数值的安全性。
精彩理解: https://www.jianshu.com/p/21be831e851e ; https://blog.csdn.net/heyutao007/article/details/19 ...
- JUC并发工具类之 CyclicBarrier同步屏障
首先看看CyclicBarrier的使用场景: 10个工程师一起来公司应聘,招聘方式分为笔试和面试.首先,要等人到齐后,开始笔试:笔试结束之后,再一起参加面试.把10个人看作10个线程,10个线程之间 ...
- java 线程同步 原理 sleep和wait区别
java线程同步的原理java会为每个Object对象分配一个monitor, 当某个对象(实例)的同步方法(synchronized methods)被多个线程调用时,该对象的monitor将负责处 ...
- Java多线程同步集合--并发库高级应用
一.阻塞队列1.在多线程领域,所谓阻塞,在某些情况下会挂起线程,一旦条件满足,被挂起的线程又会自动被唤醒2.ArrayBlockingQueue(效率高)和LinkedBlockingQueue是两个 ...
- Java 线程同步组件 CountDownLatch 与 CyclicBarrier 原理分析
1.简介 在分析完AbstractQueuedSynchronizer(以下简称 AQS)和ReentrantLock的原理后,本文将分析 java.util.concurrent 包下的两个线程同步 ...
随机推荐
- Thinking in java中关于Exception的一道面试题.
今天看到Thinking in Java中一个关于Exception的例子:最后看到有一篇总结的比较好的文章, 这里拿来记录下, 文章地址是:http://blog.csdn.net/salerzha ...
- C# 围棋盘的画法
C#绘图不是那么美,不过对于简单的图形,不注重美感的图质,用C#还是很方便的. 背景颜色.绘制图表线色.纵横列大小可按照个人喜好调节. 不提供AI代码,我自己设计的AI不是很完美,就不拿出来献丑了,算 ...
- Android入门(三)Activity-生命周期与启动模式
原文链接:http://www.orlion.ga/432/ 一.活动的生命周期 1.返回栈 Android中的活动是可以重叠的,我们每启动一个新的活动,就会覆盖在原活动之上,然后点击Back键会销毁 ...
- hdu3635 Dragon Balls(带权并查集)
/* 题意:有N个城市, 每一个城市都有一个龙珠(编号与城市的编号相同),有两个操作 T A ,B 将标号为A龙珠所在城市的所有的龙珠移动到B龙珠所在城市中! 思路:并查集 (压缩路径的时候将龙珠移动 ...
- 栈的存储结构和常见操作(c 语言实现)
俗话说得好,线性表(尤其是链表)是一切数据结构和算法的基础,很多复杂甚至是高级的数据结构和算法,细节处,除去数学和计算机程序基础的知识,大量的都在应用线性表. 一.栈 其实本质还是线性表:限定仅在表尾 ...
- RobotFramework - 在Window7系统中安装本地RobotFrmamework自动化测试环境
RIDE Installation 安装顺序:Python ---> setuptools & pip ---> Robot Framewok ---> wxPython(v ...
- 漫谈可视化Prefuse(四)---被玩坏的Prefuse API
这个双12,别人都在抢红包.逛淘宝.上京东,我选择再续我的“漫谈可视化”系列(好了,不装了,其实是郎中羞涩...) 上篇<漫谈可视化Prefuse(三)---Prefuse API数据结构阅读有 ...
- 没有R.java问题找不到getActionBar()方法
android项目,可是项目中没有重要的R.java,并且报错,说是找不到getActionBar()方法,上网寻找原因,终于寻得解决方法: 1.解决项目中没有R.java问题.在Eclipse ...
- Windows Azure Web Site (1) 用户手册
<Windows Azure Platform 系列文章目录> 下载地址: Web Apps用户手册
- [SDK2.2]Windows Azure Virtual Network (5) 重启、关闭、开启VNet中Virtual Machine
<Windows Azure Platform 系列文章目录> 我们知道,Windows Azure VM的IP分为以下两种:Internal IP Address和Public VIP ...