JUC介绍--常用辅助类(CountDownLatch CyclicBarrier Semaphore)
CountDownLatch减法计数器
每次有线程调用countDownLatch.countDown()数量就-1
数量减到0时,countDownLatch.await()会被唤醒,继续向下执行
public class CountDownLatchDemo {public static void main(String[] args) throws InterruptedException {//总数是6,必须要执行任务的时候再使用CountDownLatch countDownLatch = new CountDownLatch(6);for (int i = 1; i <= 6; i++) {new Thread(()->{System.out.println(Thread.currentThread().getName()+"go out");countDownLatch.countDown();//数量-1},String.valueOf(i)).start();}countDownLatch.await();//等待计数器归零,然后再执行下面的操作//countDownLatch.await()不被唤醒,后面的代码不会执行System.out.println("finish!");}
}
CyclicBarrier加法计数器
线程每调用一次cyclicBarrier.await()计数器+1
计数器达到总数后,执行定义的操作
public class CyclicBarrierDemo {public static void main(String[] args) {//第一个参数:总数;第二个参数:达到总数后将进行的操作CyclicBarrier cyclicBarrier = new CyclicBarrier(7, () -> {System.out.println("召唤神龙");});for (int i = 1; i <= 7; i++) {//lambda表达式无法直接操作到i,因此需要定义一个临时变量final int temp = i;new Thread(()->{System.out.println(Thread.currentThread().getName()+"收集到"+temp+"个龙珠");try {cyclicBarrier.await();} catch (InterruptedException e) {e.printStackTrace();} catch (BrokenBarrierException e) {e.printStackTrace();}},String.valueOf(i)).start();}}
}
Semaphore信号量
多个共享资源互斥使用;并发限流,控制最大的线程数
semaphore.acquire()如果资源被占满,排队等待获得资源
semaphore.release()释放资源,唤醒等待的线程;将当前的信号量释放+1,唤醒等待的线程
//3个车位6辆车的分配问题
public class SemaphoreDemo {public static void main(String[] args) {//线程数量:限制车位数 限流Semaphore semaphore = new Semaphore(3);for (int i = 0; i < 6; i++) {new Thread(()->{try {semaphore.acquire();//获得车位System.out.println(Thread.currentThread().getName()+"抢到车位");TimeUnit.SECONDS.sleep(2);//执行任务,业务代码System.out.println(Thread.currentThread().getName()+"释放车位");} catch (InterruptedException e) {e.printStackTrace();} finally {semaphore.release();//离开车位}},String.valueOf(i)).start();}}
}
JUC介绍--常用辅助类(CountDownLatch CyclicBarrier Semaphore)相关推荐
- JUC常用辅助类CountDownLatch、CyclicBarrier、Semaphore
一.CountDownLatch 简介:CountDownLatch倒计时计数锁,其主要有俩个方法,当一个或多个线程调用await()方法时,这些线程会阻塞. 其他线程调用countDown()方法会 ...
- (面经总结)一篇文章带你完整复习 Java 中并发关键字(CountDownLatch/CyclicBarrier/Semaphore/Volatile)
文章目录 一.倒计数器:CountDownLatch 二.循环栅栏:CyclicBarrier 三.信号量:Semaphore 四.volatile 关键字的作用 一.倒计数器:CountDownLa ...
- CountDownLatch CyclicBarrier Semaphore
CountDownLacth CountDownLacth(倒计数锁存器)到底有什么用呢?我们来看下面这个场景. 我们又有小片片要开始拍摄了,这个小片片需要5个演员来演,开演之前,导演需要这5个演员全 ...
- 浅谈Java锁,与JUC的常用类,集合安全类,常用辅助类,读写锁,阻塞队列,线程池,ForkJoin,volatile,单例模式不安全,CAS,各种锁
浅谈JUC的常用类 JUC就是java.util.concurrent-包下的类 回顾多线程 Java默认有几个线程? 2 个 mian.GC Java 真的可以开启线程吗? 开不了,点击源码得知:本 ...
- LeetCode 1195. Fizz Buzz Multithreaded--并发系列题目--Java 解法--AtomicInteger/CountDownLatch/CyclicBarrier
题目地址:Fizz Buzz Multithreaded - LeetCode Write a program that outputs the string representation of nu ...
- CountDownLatch和Semaphore使用场景
CountDownLatch CountDownLatch位于java.util.concurrent包下,利用它可以实现类似计数器的功能.比如有一个任务A,它要等到其它3任务完成才能执行,此时就可以 ...
- 使用Java辅助类(CountDownLatch、CyclicBarrier、Semaphore)并发编程
在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法 一.C ...
- Java并发工具类:CountDownLatch、Semaphore、CyclicBarrier、Exchanger、Phaser
本文目录: 1.CountDownLatch(闭锁) 1.CountDownLatch 例子 2.CyclicBarrier(循环栅栏) 1.CyclicBarrier 例子 2.CountDownL ...
- 《Java 7 并发编程指南》学习概要 (3)Semaphore, CountDownLatch, CyclicBarrier , Phaser, Exchanger...
1.Semaphore 信号量 Semaphore(信号量)是一个控制访问多个共享资源的计数器. 当一个线程想要访问某个共享资源,首先,它必须获得semaphore.如果semaphore的内部计数 ...
最新文章
- 00后的简历有多野?!!
- Netty3架构解析
- 重新定义SpringCloud-SpringCloud Eureka笔记- Eureka的核心类(二)
- 引入extThree20JSON之后,怎么在工程中使用
- [Python图像处理] 十一.灰度直方图概念及OpenCV绘制直方图
- elasticjob已下线_elastic-job详解(二):作业的调度
- [渝粤教育] 西南科技大学 电器设备及维修 在线考试复习资料
- 水环境模型与大数据技术融合研究
- 三、Tableau筛选器的使用
- python2与python3区别底层的区别_Python2 与 Python3 的区别(二)?
- (七) 三维点云课程---ICP(Point-to-Point)
- Py之PySide:PySide的简介、安装、使用方法之详细攻略
- chrome 自动操纵谷歌小恐龙
- Ruby电子书教程、经典脚本合集
- win11 删除不要的输入法,删除阿尔巴尼亚语输入法
- pytorch einsum, numpy einsum
- 前后端分离整合阿里云OSS图片上传功能
- 直线拟合fitLine函数的用法
- 为什么人人都是颜值控?
- 一张显卡卖5-6万?Tesla计算卡你凭什么这么贵!