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的使用相关推荐

  1. java高级----Thread之ScheduledExecutorService的使用

    ScheduledExecutorService的主要作用就是可以将定时任务与线程池功能结合使用.今天我们来学习一下ScheduledExecutorService的用法.我们都太渺小了,那么容易便湮 ...

  2. Java同步组件之CyclicBarrier,ReentrantLock

    文章目录 Java同步组件概况 `CyclicBarrier`介绍 与`CountDownLatch`比较 相同点 不同点 `CountDownLatch`和`CyclicBarrier`的场景比较 ...

  3. 2022金三银四面试总结-Java高级篇

    Java面试总结 1.你用过哪些集合类? 大公司最喜欢问的Java集合类面试题 40个Java集合面试问题和答案 java.util.Collections 是一个包装类.它包含有各种有关集合操作的静 ...

  4. 网易云课堂微专业--Java高级开发工程师

    获取方式:公众号:文若课堂 ​ 5.微专业-java |    |──大纲.jpg          910.32KB |    |──阶段1:高性能编程专题 |    |    |──1.1.1 J ...

  5. Java高级之线程同步

    本文来自刘兆贤的博客_CSDN博客-Java高级,Android旅行,Android基础领域博主 ,引用必须注明出处! 关于实现多线程的意义,"从业四年看并发"一文已经讲述,而本篇 ...

  6. 看完946页“JAVA高级架构面试必问”,金九银十社招全拿下

    前言 我本科毕业后在老东家干了两年多,老东家算是一家"小公司"(毕竟这年头没有 BAT 或 TMD 的 title 都不好意思报出身),毕业这两年多我也没有在大厂待过,因此找坑的时 ...

  7. 946页“JAVA高级架构必问面试精华”,金九银十社招全拿下

    前言 我本科毕业后在老东家干了两年多,老东家算是一家"小公司"(毕竟这年头没有 BAT 或 TMD 的 title 都不好意思报出身),毕业这两年多我也没有在大厂待过,因此找坑的时 ...

  8. Java高级面试-超级全面-大厂集合

    Java研发工程师知识点总结 大纲 一.Java基础(语言.集合框架.OOP.设计模式等) 二.Java高级(JavaEE.框架.服务器.工具等) 三.多线程和并发 四.Java虚拟机 五.数据库(S ...

  9. Java高级特性增强-多线程

    请戳GitHub原文: https://github.com/wangzhiwub... 大数据成神之路系列: 请戳GitHub原文: https://github.com/wangzhiwub... ...

最新文章

  1. JSP装状态管理 session cookie
  2. 分栏报表-物品清单报表实现
  3. 算法导论笔记:17摊还分析
  4. Java数组--获取数组中的最大值案例
  5. Spring 定时器结合线程池
  6. 每天学点SpringCloud(八):使用Apollo做配置中心
  7. jquery动态加载js/css文件方法
  8. kuka机器人齿轮箱油_库卡KUKA机器人保养润滑油00-144-898
  9. Taobao 的 Linux 内核开源贡献
  10. 如何在数据库中添加示例数据库Northwind
  11. openg-光照贴图
  12. 激光雷达定位-论文心得
  13. Android 字体库的使用-引入外部字体
  14. SEO基础知识过度优化的三大问题
  15. 倒计时 1 天丨微信大数据挑战赛,即将启动报名
  16. Unity shader护盾特效
  17. 俄罗斯方块的简单实现
  18. Kali linux 2016.2(Rolling)里安装OpenVAS
  19. 【DFS】巧妙取量的倒油问题
  20. C++的get()函数与getline()函数使用详解

热门文章

  1. 事务管理:事务的状态相关知识笔记
  2. 70条程序员编程的专业名言,你认可几条?
  3. 浅谈 Spring 框架注解的用法分析
  4. 使用react的好处_react的优点是什么呀-问答-阿里云开发者社区-阿里云
  5. Android 服务(Service)
  6. vue路由匹配实现包容性_包容性设计:面向老年用户的数字平等
  7. 来自未来,2022 年的前端人都在做什么?
  8. 2012年12月第二个周末
  9. 02如何抓住重点,系统高效地学习数据结构与算法?
  10. “云计算的前世今生·从阿里看云计算”内蒙古师范大学刘晨旭博士专题报告会顺利召开...