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)相关推荐

  1. JUC常用辅助类CountDownLatch、CyclicBarrier、Semaphore

    一.CountDownLatch 简介:CountDownLatch倒计时计数锁,其主要有俩个方法,当一个或多个线程调用await()方法时,这些线程会阻塞. 其他线程调用countDown()方法会 ...

  2. (面经总结)一篇文章带你完整复习 Java 中并发关键字(CountDownLatch/CyclicBarrier/Semaphore/Volatile)

    文章目录 一.倒计数器:CountDownLatch 二.循环栅栏:CyclicBarrier 三.信号量:Semaphore 四.volatile 关键字的作用 一.倒计数器:CountDownLa ...

  3. CountDownLatch CyclicBarrier Semaphore

    CountDownLacth CountDownLacth(倒计数锁存器)到底有什么用呢?我们来看下面这个场景. 我们又有小片片要开始拍摄了,这个小片片需要5个演员来演,开演之前,导演需要这5个演员全 ...

  4. 浅谈Java锁,与JUC的常用类,集合安全类,常用辅助类,读写锁,阻塞队列,线程池,ForkJoin,volatile,单例模式不安全,CAS,各种锁

    浅谈JUC的常用类 JUC就是java.util.concurrent-包下的类 回顾多线程 Java默认有几个线程? 2 个 mian.GC Java 真的可以开启线程吗? 开不了,点击源码得知:本 ...

  5. LeetCode 1195. Fizz Buzz Multithreaded--并发系列题目--Java 解法--AtomicInteger/CountDownLatch/CyclicBarrier

    题目地址:Fizz Buzz Multithreaded - LeetCode Write a program that outputs the string representation of nu ...

  6. CountDownLatch和Semaphore使用场景

    CountDownLatch CountDownLatch位于java.util.concurrent包下,利用它可以实现类似计数器的功能.比如有一个任务A,它要等到其它3任务完成才能执行,此时就可以 ...

  7. 使用Java辅助类(CountDownLatch、CyclicBarrier、Semaphore)并发编程

    在java 1.5中,提供了一些非常有用的辅助类来帮助我们进行并发编程,比如CountDownLatch,CyclicBarrier和Semaphore,今天我们就来学习一下这三个辅助类的用法 一.C ...

  8. Java并发工具类:CountDownLatch、Semaphore、CyclicBarrier、Exchanger、Phaser

    本文目录: 1.CountDownLatch(闭锁) 1.CountDownLatch 例子 2.CyclicBarrier(循环栅栏) 1.CyclicBarrier 例子 2.CountDownL ...

  9. 《Java 7 并发编程指南》学习概要 (3)Semaphore, CountDownLatch, CyclicBarrier , Phaser, Exchanger...

    1.Semaphore  信号量 Semaphore(信号量)是一个控制访问多个共享资源的计数器. 当一个线程想要访问某个共享资源,首先,它必须获得semaphore.如果semaphore的内部计数 ...

最新文章

  1. 00后的简历有多野?!!
  2. Netty3架构解析
  3. 重新定义SpringCloud-SpringCloud Eureka笔记- Eureka的核心类(二)
  4. 引入extThree20JSON之后,怎么在工程中使用
  5. [Python图像处理] 十一.灰度直方图概念及OpenCV绘制直方图
  6. elasticjob已下线_elastic-job详解(二):作业的调度
  7. [渝粤教育] 西南科技大学 电器设备及维修 在线考试复习资料
  8. 水环境模型与大数据技术融合研究
  9. 三、Tableau筛选器的使用
  10. python2与python3区别底层的区别_Python2 与 Python3 的区别(二)?
  11. (七) 三维点云课程---ICP(Point-to-Point)
  12. Py之PySide:PySide的简介、安装、使用方法之详细攻略
  13. chrome 自动操纵谷歌小恐龙
  14. Ruby电子书教程、经典脚本合集
  15. win11 删除不要的输入法,删除阿尔巴尼亚语输入法
  16. pytorch einsum, numpy einsum
  17. 前后端分离整合阿里云OSS图片上传功能
  18. 直线拟合fitLine函数的用法
  19. 为什么人人都是颜值控?
  20. 一张显卡卖5-6万?Tesla计算卡你凭什么这么贵!

热门文章

  1. (学习笔记)激光SLAM的发展和应用趋势
  2. 有趣的TCP BBR ProbeRTT行为点滴
  3. qt:在linux系统下创建快捷方式桌面图标
  4. MySql存储过程与调用
  5. 一站式药品数据服务平台医药魔方宣布完成数千万人民币B轮融资
  6. influxdb客户端简单使用
  7. 7-15 厘米换算英尺英寸(15 分)
  8. 通俗易懂地解释贝叶斯网络及其应用
  9. vue移动端轮播图适配宽高
  10. Python简单的信息录入可视化界面