java高级----Thread之CyclicBarrier的使用
CyclicBarrier是一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)。今天我们就学习一下CyclicBarrier的用法。
CyclicBarrier的简单使用
类CyclicBarrier不仅有CountDownLatch所具有的功能,还可以实现屏障等待的功能,也就是阶段性同步,它在使用上的意义在于可以循环地实现线程要一起做任务的目标,而不是像类CountDownLatch一样,仅仅支持一次线程与同步点阻塞的特性。
关于CyclicBarrier常用的方法的介绍:
package com.linux.huhx.concurreny;import java.io.IOException; 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 CyclicBarrierTest1 {public static void main(String[] args) throws IOException, InterruptedException {/*** 1、如果参数>3的话,三个线程的await执行完,parties只能加到3。那么子线程await后续的方法就不能执行* 2、如果参数=3的话,三个线程的await执行完,parties能加到3。所以子线程await后续的方法能执行* 3、如果参数<3的话,当第二个线程await执行完之后,parties加到了2。??????*/CyclicBarrier barrier = new CyclicBarrier(3);ExecutorService executor = Executors.newFixedThreadPool(3);executor.submit(new Thread(new Runner(barrier, "1号选手")));executor.submit(new Thread(new Runner(barrier, "2号选手")));executor.submit(new Thread(new Runner(barrier, "3号选手")));Thread.sleep(200);System.out.println("in main method after");executor.shutdown();}public static class Runner implements Runnable {// 一个同步辅助类,它允许一组线程互相等待,直到到达某个公共屏障点 (common barrier point)private CyclicBarrier barrier;private String name;public Runner(CyclicBarrier barrier, String name) {super();this.barrier = barrier;this.name = name;}@Overridepublic void run() {try {Thread.sleep(new Random().nextInt(1000));System.out.println(name + " 准备好了...");// barrier的await方法,在所有参与者都已经在此 barrier 上调用 await 方法之前,将一直等待。 barrier.await();} catch (InterruptedException e) {e.printStackTrace();} catch (BrokenBarrierException e) {e.printStackTrace();}System.out.println(name + " 起跑!");}} }
运行的结果如下:执行的结果不固定
in main method after 2号选手 准备好了... 1号选手 准备好了... 3号选手 准备好了... 2号选手 起跑! 1号选手 起跑! 3号选手 起跑!
友情链接
- 比较好的参考博客:http://blog.csdn.net/shihuacai/article/details/8856407
转载于:https://www.cnblogs.com/huhx/p/baseusejavaCyclicBarrier.html
java高级----Thread之CyclicBarrier的使用相关推荐
- java高级----Thread之ScheduledExecutorService的使用
ScheduledExecutorService的主要作用就是可以将定时任务与线程池功能结合使用.今天我们来学习一下ScheduledExecutorService的用法.我们都太渺小了,那么容易便湮 ...
- Java同步组件之CyclicBarrier,ReentrantLock
文章目录 Java同步组件概况 `CyclicBarrier`介绍 与`CountDownLatch`比较 相同点 不同点 `CountDownLatch`和`CyclicBarrier`的场景比较 ...
- 2022金三银四面试总结-Java高级篇
Java面试总结 1.你用过哪些集合类? 大公司最喜欢问的Java集合类面试题 40个Java集合面试问题和答案 java.util.Collections 是一个包装类.它包含有各种有关集合操作的静 ...
- 网易云课堂微专业--Java高级开发工程师
获取方式:公众号:文若课堂 5.微专业-java | |──大纲.jpg 910.32KB | |──阶段1:高性能编程专题 | | |──1.1.1 J ...
- Java高级之线程同步
本文来自刘兆贤的博客_CSDN博客-Java高级,Android旅行,Android基础领域博主 ,引用必须注明出处! 关于实现多线程的意义,"从业四年看并发"一文已经讲述,而本篇 ...
- 看完946页“JAVA高级架构面试必问”,金九银十社招全拿下
前言 我本科毕业后在老东家干了两年多,老东家算是一家"小公司"(毕竟这年头没有 BAT 或 TMD 的 title 都不好意思报出身),毕业这两年多我也没有在大厂待过,因此找坑的时 ...
- 946页“JAVA高级架构必问面试精华”,金九银十社招全拿下
前言 我本科毕业后在老东家干了两年多,老东家算是一家"小公司"(毕竟这年头没有 BAT 或 TMD 的 title 都不好意思报出身),毕业这两年多我也没有在大厂待过,因此找坑的时 ...
- Java高级面试-超级全面-大厂集合
Java研发工程师知识点总结 大纲 一.Java基础(语言.集合框架.OOP.设计模式等) 二.Java高级(JavaEE.框架.服务器.工具等) 三.多线程和并发 四.Java虚拟机 五.数据库(S ...
- Java高级特性增强-多线程
请戳GitHub原文: https://github.com/wangzhiwub... 大数据成神之路系列: 请戳GitHub原文: https://github.com/wangzhiwub... ...
最新文章
- JSP装状态管理 session cookie
- 分栏报表-物品清单报表实现
- 算法导论笔记:17摊还分析
- Java数组--获取数组中的最大值案例
- Spring 定时器结合线程池
- 每天学点SpringCloud(八):使用Apollo做配置中心
- jquery动态加载js/css文件方法
- kuka机器人齿轮箱油_库卡KUKA机器人保养润滑油00-144-898
- Taobao 的 Linux 内核开源贡献
- 如何在数据库中添加示例数据库Northwind
- openg-光照贴图
- 激光雷达定位-论文心得
- Android 字体库的使用-引入外部字体
- SEO基础知识过度优化的三大问题
- 倒计时 1 天丨微信大数据挑战赛,即将启动报名
- Unity shader护盾特效
- 俄罗斯方块的简单实现
- Kali linux 2016.2(Rolling)里安装OpenVAS
- 【DFS】巧妙取量的倒油问题
- C++的get()函数与getline()函数使用详解
热门文章
- 事务管理:事务的状态相关知识笔记
- 70条程序员编程的专业名言,你认可几条?
- 浅谈 Spring 框架注解的用法分析
- 使用react的好处_react的优点是什么呀-问答-阿里云开发者社区-阿里云
- Android 服务(Service)
- vue路由匹配实现包容性_包容性设计:面向老年用户的数字平等
- 来自未来,2022 年的前端人都在做什么?
- 2012年12月第二个周末
- 02如何抓住重点,系统高效地学习数据结构与算法?
- “云计算的前世今生·从阿里看云计算”内蒙古师范大学刘晨旭博士专题报告会顺利召开...