CyclicBarrier、CountDownLatch与Semaphore的小记
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的小记的更多相关文章
- java并发之CountDownLatch、Semaphore和CyclicBarrier
JAVA并发包中有三个类用于同步一批线程的行为,分别是CountDownLatch.Semaphore和CyclicBarrier. CountDownLatch Java之CountDownLatc ...
- 转发---[沧海拾遗]java并发之CountDownLatch、Semaphore和CyclicBarrier
JAVA并发包中有三个类用于同步一批线程的行为,分别是CountDownLatch.Semaphore和CyclicBarrier. CountDownLatch CountDownLatch是一个计 ...
- 30行自己写并发工具类(Semaphore, CyclicBarrier, CountDownLatch)是什么体验?
30行自己写并发工具类(Semaphore, CyclicBarrier, CountDownLatch)是什么体验? 前言 在本篇文章当中首先给大家介绍三个工具Semaphore, CyclicBa ...
- Java多线程20:多线程下的其他组件之CountDownLatch、Semaphore、Exchanger
前言 在多线程环境下,JDK给开发者提供了许多的组件供用户使用(主要在java.util.concurrent下),使得用户不需要再去关心在具体场景下要如何写出同时兼顾线程安全性与高效率的代码.之前讲 ...
- Java并发(6)- CountDownLatch、Semaphore与AQS
引言 上一篇文章中详细分析了基于AQS的ReentrantLock原理,ReentrantLock通过AQS中的state变量0和1之间的转换代表了独占锁.那么可以思考一下,当state变量大于1时代 ...
- J.U.C-三剑客[semaphore\CyclicBarrier\CountDownLatch]
一.semaphore信号量,底层也是基于AQS 使用: /** * 可以理解为控制某个资源最多有多少个线程同时执行,(比如洗手间,并行与排队) * 如果满了只能等待直到其它资源释放(可以理解为并发量 ...
- java线程并发工具类CyclicBarrier、CountDownLatch及Semaphore
一.CyclicBarrier (原文链接:http://www.studyshare.cn/blog-front/blog/index ) 1.定义 CyclicBarrier是线程并发工具类之 ...
- java.util.concurrent常用类(CountDownLatch,Semaphore,CyclicBarrier,Future)
CyclicBarrier CyclicBarrier是用来一个关卡来阻挡住所有线程,等所有线程全部执行到关卡处时,再统一执行下一步操作.假设一个场景:每个线程代表一个跑步运动员,当运动员都准备好后, ...
- AQS之CountDownLatch、Semaphore、CyclicBarrier
CountDownLatch A synchronization aid that allows one or more threads to wait until a set of operatio ...
随机推荐
- 双系统下利用MbrFix.exe卸载LINUX系统
前言: 不少同学笔记本都装的有双系统,一般都是LIUNX和WINDOWS的两个系统(由于以前对电脑各种无知)装了双系统,再次,小编就不在阐述双系统地各种不便,再次就强调一下,假若要卸载LINUX的话 ...
- 微软职位内部推荐-Software Engineer II-News
微软近期Open的职位: News is a critical areas for integration of mobile and services, one of the top priorit ...
- Android -- PowerManager和PowerManager.WakeLock
PowerManager.WakeLock PowerManager.WakerLock是我 ...
- nodeJs事件之监听移除事件
var EventEmitter=require('events').EventEmitter var life=new EventEmitter(); //comfort 求安慰,函数名: //fo ...
- Excel下用SQL语句实现AVEDEV函数功能
Excel下AVEDEV函数返回一组数据点到其算术平均值的绝对偏差的平均值. AVEDEV 是对一组数据中变化性的度量.最常见的应用就是统计平均分差. 但是如果在Excel中写SQL进行一些复杂的统计 ...
- MVC4 网站发布(整理 + 部分转载 + 部分问题收集和解决方案)
网站发布步骤: 这部分是转载文章 在此标明出处,以前有文章是转的没标明的请谅解,因为有些已经无法找到出处,或者与其它原因. 如有冒犯请联系本人,或删除,或标明出处. 因为好的文章,以前只想收藏,但连接 ...
- Xamarin.Android之山有木兮之木有枝,心悦君兮君不知。
Xamarin.Android之山有木兮之木有枝,心悦君兮君不知. 第一步,写项目中的第一个界面. <?xml version="1.0" encoding =" ...
- JavaScript 变量、作用域和内存问题
JavaScript的基本类型值和引用类型值具有以下特点: 1.基本类型值在内存中占据固定的大小,因此被保存在栈内存中: 2.引用类型值是对象,保存在堆内存中: 3.从变量向另一个变量复制基本类型的值 ...
- 配置Symfony2
安装成功后打开server php app/console server:run 127.0.0.1:8000 然后在浏览器输入localhost/8000/config.php进行配置 1.date ...
- Ombrophobic Bovines - POJ 2391
Description FJ's cows really hate getting wet so much that the mere thought of getting caught in the ...