7.JUC 三大辅助类
7.JUC 三大辅助类
JUC提供了三种常用的辅助类,通过这些辅助类可以很好的解决线程数量过多Lock锁的频繁操作。这三种辅助类为:
CountDownLatch:减少计数
Cyclicbarrier:循环栅栏
Semaphore:信号灯
7.1 减少计数CountDownLatch
CountDownLatch类可以设置一个计数器,然后通过countDown方法来进行减1操作,使用await方法等待计数不大于0,然后继续执行await方法之后的语句。
- CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,这些线程会阻塞。
- 其他线程调用countDown方法会将计数器减1(调用countDown方法的线程不会阻塞)。
- 当计数器的值变为0时,因await方法阻塞的线程会被唤醒,继续执行。
场景:6个同学陆续离开教师后值班同学才可以关门。
/*** CountDownLatch Demo*/
public class CountDownLatchDemo {/*** 6个陆续离开教师之后,班长锁门*/public static void main(String[] args) throws InterruptedException {// 创建CountDownLathc 对象,设置初始值CountDownLatch countDownLatch = new CountDownLatch(6);// 6个同学陆续离开教室之后for (int i = 0; i < 6; i++) {new Thread(() -> {System.out.println(Thread.currentThread().getName() + "号同学离开教室");// 计数减一countDownLatch.countDown();}, String.valueOf(i)).start();}// 等待countDownLatch.await();System.out.println(Thread.currentThread().getName() + "班长锁门走人了");}
}
7.2 循环栅栏CyclicBarrier
CycliBarrier看英文单词可以看出大概就是循环阻塞的意思,在使用Cyclicbarrier的构造方法第一个参数是目标障碍述,每次执行Cyclicbarrier一次障碍数会加一,如果达到目标障碍数,才会执行cyclicBarrier.await() 之后的语句。可以将CyclicBarrier理解为加1操作。
场景:集齐七颗七龙珠
/*** 集齐七颗龙珠,就可以召唤神龙*/
public class CyclicBarrierDemo {/*** 创建固定值*/private static final int NUMBER = 7;public static void main(String[] args) {// 创建 CyclicBarrierCyclicBarrier cyclicBarrier = new CyclicBarrier(NUMBER, () -> {System.out.println("集齐7颗龙珠可以召唤神龙");});// 集齐七课龙珠过程for (int i = 1; i <= 7; i++) {new Thread(() -> {try {System.out.println(Thread.currentThread().getName() + "星龙珠被收集到了");// 等待cyclicBarrier.await();} catch (Exception e) {e.printStackTrace();}}, String.valueOf(i)).start();}}
}
7.3 信号灯Semaphore
Semaphore 的构造方法中传入的第一个参数是最大信号量(可以看成最大线程池),每个信号量初始化未一个最多只能分发一个许可证,使用acquire方法获得许可证,release方法释放许可。
/*** 6 辆汽车,停3个车位*/
public class SemaphoreDemo {public static void main(String[] args) {// 创建Semaphore,设置许可数量Semaphore semaphore = new Semaphore(3);for (int i = 1; i <= 6; i++) {new Thread(() -> {try {// 抢占车位semaphore.acquire();System.out.println(Thread.currentThread().getName() + "抢到车位");// 设置随机时间TimeUnit.SECONDS.sleep(new Random().nextInt(5));System.out.println(Thread.currentThread().getName() + "------离开的车位");} catch (Exception e) {e.printStackTrace();} finally {// 释放semaphore.release();}},String.valueOf(i)).start();}}
}
7.JUC 三大辅助类相关推荐
- JUC并发编程之Callable接口、JUC三大辅助类
目录 8. Callable接口 8.1 创建线程的多种方式 8.2 概述 8.3 用Callable接口创建Thred线程 8.4 小结(重点) 9. JUC 三大辅助类 9.1 概述 9.2 减少 ...
- JUC 高并发编程之JUC三大辅助类
JUC 高并发编程之JUC三大辅助类 JUC 中提供了三种常用的辅助类,通过这些辅助类可以很好的解决线程数量过 多时 Lock 锁的频繁操作.这三种辅助类为: CountDownLatch: 减少计数 ...
- JUC 三大辅助类解读
目录 减少计数 CountDownLatch 构造办法 代码实战 循环栅栏 CyclicBarrier 构造器 代码实战 信号灯 Semaphore 构造办法 代码实战 JUC 中提供了三种常用的辅助 ...
- JUC-JUC三大辅助类
7 JUC 三大辅助类 JUC 中提供了三种常用的辅助类,通过这些辅助类可以很好的解决线程数量过多时 Lock 锁的频繁操作.这三种辅助类为: CountDownLatch: 减少计数 CyclicB ...
- JUC:7_2三大辅助类:CylicBarrier原理及使用、线程加法计数器
JUC:7_2三大辅助类:CylicBarrier原理及使用.线程加法计数器 JUC:7_1三大辅助类:CountDownLatch原理及使用.线程减法计数器 什么是CyclicBarrier? 构造 ...
- JUC——JUC强大辅助类讲解
文章目录 1:JUC是什么 2:倒计数器--CountDownLatchDemo 3:循环栅栏--CyclicBarrier 4:允许多个线程同时访问--Semaphore(信号量) 1:JUC是什么 ...
- Day127.JUC:线程间通信(Conditon)、并发容器类(CopyOnWrite)、JUC强大辅助类、Callable
. 目录 一.线程间通信 线程间通信改造成Lock版 Condition 定制化调用通信 Condition 二.并发容器类 (解决集合安全问题) CopyOnWrite 写时拷贝技术 三.JUC ...
- JUC重要辅助类(同步组件及锁)
一.CountDownLatch(计数器) 原理: CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,这些线程会阻塞.其它线程调用countDown方法会将计数器减1( ...
- JUC常用辅助类CountDownLatch、CyclicBarrier、Semaphore
一.CountDownLatch 简介:CountDownLatch倒计时计数锁,其主要有俩个方法,当一个或多个线程调用await()方法时,这些线程会阻塞. 其他线程调用countDown()方法会 ...
- JUC: 同步辅助类
java.util.concurrent包下,有一些关于同步的辅助工具类,比如CountDownLatch.CyclicBarrier等. CountDownLatch 允许一个或多个线程等待直到在其 ...
最新文章
- tplink wr886n v5.0 ttl 接线方法
- Android项目:proguard混淆之常见开源项目混淆配置
- 笔记:Linux下C编程实现每隔一秒向文件中写入当前时间
- ML之xgboost:基于xgboost(5f-CrVa)算法对HiggsBoson数据集(Kaggle竞赛)训练(模型保存+可视化)实现二分类预测
- 【NLP】TransformerXL:因为XL,所以更牛
- 【LeetCode笔记 - 每日一题】375. 猜数字游戏 II (Java、DFS、动态规划)
- System Center Technical Preview DPM(2016)对Exchange2016的灾难恢复
- 6 SystemVerilog语言编写售货机
- Python高阶函数-闭包
- opencv-4.5.5-vc14_vc15配置环境VC++
- matlab均值滤波实现
- PDF编辑器中文版免费下载哪里可以下载?
- C51单片机程序环境搭建及第一个程序运行
- 微信图片怎么添加竖排文字_如何给微信图片添加上竖排文字?
- 化工、食品外贸行业管理难点
- 交换机连接控制器_MESH路由器组网指南,各种连接方法
- 计算机辅助翻译与人工翻译论文,浅析计算机辅助翻译与纯人工翻译的利与弊
- Rotation - 旋转
- 台式机通过网线连接笔记本的wifi网络
- QIIME2进阶二_元数据及数据导入QIIME2
热门文章
- icloud android 日历同步到iphone,Mac的日历事件如何同步到iphone-Mac的日历事件同步到iphone教程 - 河东软件园...
- 上网代理设置会被自动清空_代理服务器上网(代理服务器老是自动打开)
- 全国气象预报业务产品grib2数据格式解析
- 一个https神奇的故事
- 个人备案网站不能做博客了?
- 【demo】虫眼镜的制作 制作 完了 finish
- weblogic 启动很慢_【转】解决weblogic启动慢和创建域慢的方法
- python爬虫数据可视化豆瓣评分top250_Python数据可视化:豆瓣电影TOP250
- vue/uniapp 百度统计埋点
- 没有ftp信息服务器,电脑没有ftp服务器配置