一:CountDownLatch

CountDownLatch是一个执行 完成任务线程数 的 倒数计数器。我们考虑这种情况:士兵晨练,必须全队士兵集合完毕才开始跑步。用程序描述就:在晨练线程中,逐个启动士兵的集合线程,执行集合动作;等所有士兵的集合线程都执行完毕,才能继续晨练线程执行跑步操作。那么我们怎么快速地统计已经集合的士兵线程数,以及怎样在集合完毕后第一时间启动跑步呢?这里就需要用到CountDownLatch。

1:首先,我们在晨练线程中创建一个CountDownLatch:static final CountDownLatch countDownLatch = new CountDownLatch(10);//构造参数说明有多少个需要完成的线程

2:在每个士兵的集合线程中,通过:countDownLatch.countDown();  //说明当前线程已经执行到屏障处,把倒数计数器值减1

3:在晨练线程中,通过:countDownLatch.await();  //暂时挂起线程,等待倒数计数器为0时自动唤醒,继续执行

二:CyclicBarrier

与countDownLatch相反,这是一个加法计数器的同步屏障,并且可以重复使用。它在每个线程中设置屏障点,当一个线程执行到屏障点时就需要停下,计数器+1,直到计数器达到创建时指定值时执行相应的响应线程,并且全部线程继续执行,直到下一个屏障处等待或者执行完毕。

1:创建CyclicBarrier同步屏障对象,设置屏障处计数值以及达到该值后执行什么响应动作线程:

CyclicBarrier barrier = new CyclicBarrier(n, new BarrierDone_Run());

2:在BarrierDone_Run线程中,定义  执行到屏障处而停顿的线程数达到设定值  时,启动响应线程执行后续操作。

3:逐个启动工作线程,在工作线程的run()方法中,通过: barrier.await();  //设定屏障,当线程执行到这步时挂起,直到计数器达到设定值时才继续执行

三:比较

1:CountDownLatch是把主干线程挂起,在任务线程中进行倒数计数,直到任务线程执行完才唤醒主干线程继续执行;

CyclicBarrier是把任务线程挂起,直到所有任务线程执行到屏障处再放行继续执行;

2:CountDownLatch达到屏障放行标准后放行的是主干线程;

CyclicBarrier达到屏障放行标准后放行的是任务线程,并且还会额外地触发一个达到标准后执行的响应线程;

Java多线程同步屏障计算_Java多线程之CountDownLatch和CyclicBarrier同步屏障的使用相关推荐

  1. 多线程之CountDownLatch和CyclicBarrier的区别和用法

    一.CountDownLatch的使用 CountDownLatch经常用于监听某些初始化操作,等初始化执行完毕后,再通知主线程继续工作. CountDownLatch定义: 一个同步辅助类,在完成一 ...

  2. Java多线程之CountDownLatch用法

    Java多线程之CountDownLatch用法 本文目录: CountDownLatch基本概念 CountDownLatch案例:6个同学陆续离开教室后班长才可以关门 CountDownLatch ...

  3. java 多线程的基本概念_java基本教程之多线程基本概念 java多线程教程

    多线程是Java中不可避免的一个重要主体.下面我们将展开对多线程的学习.接下来的内容,是对"JDK中新增JUC包"之前的Java多线程内容的讲解,涉及到的内容包括,Object类中 ...

  4. java 多线程和并行编程_Java 8中的并行和异步编程

    java 多线程和并行编程 并行代码是在多个线程上运行的代码,曾经是许多经验丰富的开发人员的噩梦,但是Java 8带来了许多更改,这些更改应该使这种提高性能的窍门更加易于管理. 并行流 在Java 8 ...

  5. java多线程的实现方式_JAVA多线程实现的三种方式

    最近在做代码优化时学习和研究了下JAVA多线程的使用,看了菜鸟们的见解后做了下总结. 1.JAVA多线程实现方式 JAVA多线程实现方式主要有三种:继承Thread类.实现Runnable接口.使用E ...

  6. java 买票_java 多线程之synchronized wait/notify解决买票问题

    一.Java线程具有五中基本状态 新建状态(New):当线程对象对创建后,即进入了新建状态,如:Thread t = new MyThread(); 就绪状态(Runnable):当调用线程对象的st ...

  7. java多线程下载源码_Java多线程文件分片下载实现的示例代码

    多线程下载介绍 多线程下载技术是很常见的一种下载方案,这种方式充分利用了多线程的优势,在同一时间段内通过多个线程发起下载请求,将需要下载的数据分割成多个部分,每一个线程只负责下载其中一个部分,然后将下 ...

  8. java多线程编程—高级主题_Java day20 高级编程【第一章】Java多线程编程

    [第一章]Java多线程编程 一.进程与线程 多个时间段会有多个程序依次执行,但是同一时间点只有一个进程执行 线程是在进程基础之上划分的更小的程序单元 ,线程是在进程基础上创建并且使用的,所以线程依赖 ...

  9. java 多线程两种方式_JAVA多线程实现的两种方式

    java多线程实现方式主要有两种:继承Thread类.实现Runnable接口 1.继承Thread类实现多线程 继承Thread类的方法尽管被我列为一种多线程实现方式,但Thread本质上也是实现了 ...

最新文章

  1. 某大厂程序员吐槽:在北京当码农,不敢结婚不敢生娃,真是注孤生!
  2. @所有城市:想建AI智算中心的看这里!国家认可的那种
  3. php的__FILE__常量和dirname()
  4. Leetcode1684. 统计一致字符串的数目[C++题解]:字符串O(n^2)简单题
  5. 招商银行、To B智能投顾讲述:金融机构的人工智能实践 | CCF-GAIR 2017
  6. 一个有钱人儿子写的作文!
  7. 阶乘和(信息学奥赛一本通-T1173)
  8. 再看lambda/sorted/filter/map
  9. angularjs $state.go页面不刷新数据
  10. 项目部署到服务器后字符编码,将UTF-8编码的数据发布到服务器会丢失某些字符...
  11. C语言程序设计-谭浩强第五版习题【答案解析】2022.5.10
  12. Javaweb常用单词
  13. Android手势密码解锁
  14. 雷霆战机服务器维护公告,雷霆战机停服公告 4月11日服务器维护
  15. matlab处理采集的声音数据
  16. 天蝎项目整机柜服务器技术规范v1.01,天蝎项目整机柜服务器技术规范v1.01.pdf
  17. 开山斧 V0.3 WIN 版本
  18. TCP/IP协议十二:关于MAC地址和IP地址在传输过程中变与不变的问题
  19. js 字符串转gbk 数组
  20. 分析方法4---多维度拆解分析

热门文章

  1. 评分模型的监控报表汇总
  2. 那些机器学习中无法衍生的强规则变量有吗?
  3. 图书管理系统(微信、后台、网页端)总结
  4. jquery 左右移动 以及使用layer.js弹出框呈现在页面上
  5. 实现Serclet(1)
  6. linux 访问windows 共享文件
  7. 三、常用行内元素与块元素
  8. UVA-10026 Shoemaker's Problem (贪心)
  9. ListT清除重复某一项
  10. 关于QTP 9.2 .NET 插件破解的尝试