CyclicBarrier:

适合的业务场景,比如

1)、,现有一大任务,需要得到全年的统计数据的,这个工作量是巨大的,那么可以将其分割为12个月的子任务,各个子任务相互独立,当所有子任务完成了,则就可以进行全年统计了,这样大大提升了统计效率。

2)、大家一起去郊游,由于大家住的地方比较分散,故需要一个集合点之后一起出发,这样大家才能玩得开心嘛。

。。。。等等

就是当有一个大任务时,需要分配多个子任务去执行,只有当所有的子任务都执行完成后,才能执行主任务。

//阻塞等待
public int await()

CountDownLatch:

适合的业务场景,比如

1)、运动会中赛跑项目,之后所有的赛跑运动员准备好了,此时裁判才能宣布该赛跑项目正式开始,裁判才能打出发信枪;当参与此次赛跑项目的所有的运动员都跑完了,此次赛跑项目才能算结束,才能统计出比赛名次。

。。。。等等

就是所有的准备好了,才能开始;或者是所有的都结束了,才能算结束。

//阻塞等待,直到计数器清零
public void await() //阻塞等待,直到等待到最长时间,当等待时间超过设置时间时,计数器还没有清零,则返回false,否则返回true
public boolean await(long timeout, TimeUnit unit) //计数器减一,当计数器清零时,await的线程会被唤醒,线程继续执行
public void countDown() //获取当前计数器的大小
public long getCount()

Semaphore:

适合的业务场景,比如

1)、当有10个人去上茅厕,但是只有5个坑,即只能同时5个人使用,只有当一个人不使用坑了,另一个人才能使用该空闲的坑,一直维持着只能同时5个人使用。

2)、当停车场来了100辆车时,但是只有30个停车位,即只能同时提供30个车辆停放,只有当一辆车开走了,另一辆车才能进入该空闲的停车位,一直维持着只能同时提供30个停车位。

。。。。等等

就是同时只能提供有限的,走一个才能进一个。

//申请获取许可,当没有剩余的许可时,则被阻塞
public void acquire() //释放一个许可
public void release()

总结:

 CountDownLatch是等待一组线程执行完毕后才能继续执行

 CyclicBarrier是能让一组线程达到一个同步点时被阻塞,直到最后一个线程达到,阻塞才会消失,其是可以循环使用的

 Semaphore是只允许一定数量的线程同时执行

CyclicBarrier、CountDownLatch与Semaphore的小记的更多相关文章

  1. java并发之CountDownLatch、Semaphore和CyclicBarrier

    JAVA并发包中有三个类用于同步一批线程的行为,分别是CountDownLatch.Semaphore和CyclicBarrier. CountDownLatch Java之CountDownLatc ...

  2. 转发---[沧海拾遗]java并发之CountDownLatch、Semaphore和CyclicBarrier

    JAVA并发包中有三个类用于同步一批线程的行为,分别是CountDownLatch.Semaphore和CyclicBarrier. CountDownLatch CountDownLatch是一个计 ...

  3. 30行自己写并发工具类(Semaphore, CyclicBarrier, CountDownLatch)是什么体验?

    30行自己写并发工具类(Semaphore, CyclicBarrier, CountDownLatch)是什么体验? 前言 在本篇文章当中首先给大家介绍三个工具Semaphore, CyclicBa ...

  4. Java多线程20:多线程下的其他组件之CountDownLatch、Semaphore、Exchanger

    前言 在多线程环境下,JDK给开发者提供了许多的组件供用户使用(主要在java.util.concurrent下),使得用户不需要再去关心在具体场景下要如何写出同时兼顾线程安全性与高效率的代码.之前讲 ...

  5. Java并发(6)- CountDownLatch、Semaphore与AQS

    引言 上一篇文章中详细分析了基于AQS的ReentrantLock原理,ReentrantLock通过AQS中的state变量0和1之间的转换代表了独占锁.那么可以思考一下,当state变量大于1时代 ...

  6. J.U.C-三剑客[semaphore\CyclicBarrier\CountDownLatch]

    一.semaphore信号量,底层也是基于AQS 使用: /** * 可以理解为控制某个资源最多有多少个线程同时执行,(比如洗手间,并行与排队) * 如果满了只能等待直到其它资源释放(可以理解为并发量 ...

  7. java线程并发工具类CyclicBarrier、CountDownLatch及Semaphore

    一.CyclicBarrier   (原文链接:http://www.studyshare.cn/blog-front/blog/index ) 1.定义 CyclicBarrier是线程并发工具类之 ...

  8. java.util.concurrent常用类(CountDownLatch,Semaphore,CyclicBarrier,Future)

    CyclicBarrier CyclicBarrier是用来一个关卡来阻挡住所有线程,等所有线程全部执行到关卡处时,再统一执行下一步操作.假设一个场景:每个线程代表一个跑步运动员,当运动员都准备好后, ...

  9. AQS之CountDownLatch、Semaphore、CyclicBarrier

    CountDownLatch A synchronization aid that allows one or more threads to wait until a set of operatio ...

随机推荐

  1. js贪吃蛇

    function init() { w = 40; m = 20; d = w * m / 2; food = null; dm = new ht.DataModel(); g3d = new ht. ...

  2. c/c++常用代码--udp多播

    #include <stdio.h> #include <stdlib.h> #include <windows.h> #include <winsock.h ...

  3. C++设计模式——工厂方法模式

    本文版权归果冻说所有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利.» 本文链接:http://www.jellythink.com/arch ...

  4. 20145120 《Java程序设计》第7周学习总结

    20145120 <Java程序设计>第7周学习总结 教材学习内容总结 Lambda表达式 例:Comparator<String> byLength = (name1, na ...

  5. Careercup - Microsoft面试题 - 5120588943196160

    2014-05-10 22:58 题目链接 原题: Three points are given A(x1, y1), B(x2, y2), C(x3, y3). Write a method ret ...

  6. 也发一个自己实现的android简单文件选择器代码。支持多卡,排序

    一个很简单的文件选择器对话框,支持双sd卡,当然前提是要有sd卡..并且实现了排序效果. 只有100多行的代码,基本的思路就是用listview显示目录下的所有子文件,再判断是文件还是目录. 利用Co ...

  7. 【Recover Binary Search Tree】cpp

    题目: Two elements of a binary search tree (BST) are swapped by mistake. Recover the tree without chan ...

  8. jquery实现select下拉框可输入+联想关联option

    下面代码摘自http://www.oschina.net/question/96791_12832 <script language="javascript" src=&qu ...

  9. 前端之JavaScript第一天学习(3)-JavaScript输出

    JavaScript 通常用于操作 HTML 元素. 操作 HTML 元素 如需从 JavaScript 访问某个 HTML 元素,您可以使用 document.getElementById(id) ...

  10. 在线自动下载最新版本jquery

    <script src="http://code.jquery.com/jquery-latest.js">