常用的辅助类

在JUC并发编程里面,有一个常用的辅助类;
java.util.concurrent 包下的;

1:CountDownLatch

这是一个一次性的现象 - 计数无法重置。

package com.baidu.add;import java.util.concurrent.CountDownLatch;public class CountDownLatchDemo {//相当与我们的减法操作public static void main(String[] args) throws InterruptedException {CountDownLatch countDownLatch = new CountDownLatch(6);for (int i = 1; i <=6; i++) {new Thread(()->{System.out.println(Thread.currentThread().getName()+"Get Out");countDownLatch.countDown(); //数量减一1},String.valueOf(i)).start();}countDownLatch.await(); //等待计数器为零 ,然后在往下执行;System.out.println("Close Door");}}

原理:
countDownLatch.countDown(); //数量减一1
countDownLatch.await(); //等待计数器为零 ,然后在往下执行;

2:CyclicBarrier

释放之后重新使用。

package com.baidu.add;import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;public class CyclicBarrierDemo {public static void main(String[] args) {CyclicBarrier cyclicBarrier = new CyclicBarrier(7,()->{System.out.println("召唤神龙成功!");});for (int i = 1; i <= 7; 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();}}).start();}}
}

3:Semaphore

package com.baidu.add;import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;public class SemaphoreDemo {public static void main(String[] args) {//线程数量,停车位.限流!!Semaphore semaphore = new Semaphore(3);for (int i = 1; i <= 6; i++) {new Thread(()->{//acquire()得到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 {//release()释放semaphore.release();}},String.valueOf(i)).start();}}
}

原理:
semaphore.acquire(); 获得;假设已经满了,等待,等待被释放为止;
semaphore.release(); 释放,会将当前的释放量释放+1;然后唤醒等待的线程。

作用
多个共享的资源互斥的使用!并发限流,控制最大的线程数!

JUC种常用的辅助类相关推荐

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

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

  2. Java并发编程-常用的辅助类

    常用的辅助类 1.CountDownLatch 1.2.示例:班长锁门问题 1.2.CountDownLatch类简介: 1.2.1 CountDownLatch概念 1.2.3 CountDownL ...

  3. java并发类_Java并发编程之常用的辅助类详解

    1.CountDownLatch 1.2.示例:班长锁门问题 问题描述:假如有7个同学晚上上自习,钥匙在班长手上,并且要负责锁门.班长必须要等所有人都走光了,班长才能关灯锁门.这6个同学的顺序是无序的 ...

  4. Java GUI编程的几种常用布局管理器

    Java GUI编程的几种常用布局管理器 本人是一个大二的学生.因为最近有做JavaGUI界面的需求,因此重新开始熟悉JavaGUI的各种控件和布局.然后以次博文为笔记,总结.完善以及发表最近学习的一 ...

  5. html脚本语言居中,web前端:CSS--几种常用的水平垂直居中对齐方法

    层叠样式表(英文全称:CascadingStyleSheets)是一种用来表现html(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言.css不仅可以静态地修 ...

  6. C#的6种常用集合类大比拼【月儿原创】

    C#的6种常用集合类大比拼 作者:清清月儿 主页:http://blog.csdn.net/21aspnet/           时间:2007.6.27 说明:MSDN没有说出几种集合类其间的区别 ...

  7. 基于 Python 的 8 种常用抽样方法

    抽样是统计学.机器学习中非常重要,也是经常用到的方法,因为大多时候使用全量数据是不现实的,或者根本无法取到.所以我们需要抽样,比如在推断性统计中,我们会经常通过采样的样本数据来推断估计总体的样本. 上 ...

  8. 详细介绍!Linux 上几种常用的文件传输方式

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 责编:乐乐 来源:https://dwz.cn/VWIHhsOw 昨天发布一篇Linux文章( ...

  9. CCTextFieldTTF 与 5种常用CCMenuItem

    //继承(class HelloWorld : public cocos2d::CCLayer, public cocos2d::CCTextFieldDelegate) CCTextFieldTTF ...

  10. 网页html文档头部声明的两种常用模式

    Html文档头部声明的两种常用模式 第一种,XHTML1.0严格模式,对很多废除的标签不支持,书写要严格遵守W3C的要求,是找虐的好方法: <!DOCTYPE html PUBLIC " ...

最新文章

  1. iOS夯实:RunLoop
  2. python学习-16 列表list
  3. 决定系数R2真的可靠吗?
  4. Linux执行yum不显示时间图形,Linux停的yum命令详解(朝花夕拾)
  5. 【原理图操作】原理图更新PCB时未改动元器件布局变动问题?
  6. 请查收,一份让你年薪突破20W的Python爬虫笔记!
  7. 【linux系统编程】理解冯•诺依曼体系结构
  8. MyBatis-Plus通过注解的方式绑定一对多查询
  9. docker挂载目录
  10. 干货!面向多源数据融合的睡眠时序分类方法研究
  11. Gitgub学习笔记(二)
  12. vue开发完整企业购物商城集成支付宝和微信登陆支付3步实现登陆
  13. 大话西游手游服务器维护要多久,大话西游手游7月22日维护及解读
  14. 会议记录管理系统(5) -浏览会议记录模块设计
  15. 马云:你穷,是因为你没有极度渴望成为成功的野心
  16. 创建MySQL桌面快捷方式的方法
  17. 华为mate30如何开启USB网络共享
  18. Linux虚拟机配置网络代理配置yum源
  19. 基于springboot的小区社区物业管理系统
  20. Basalt Paper Reading

热门文章

  1. camera 自动对焦手动对焦
  2. The “fxp/composer-asset-plugin“ plugin was skipped because it requires a Plugin API version (“^1.0“)
  3. camera成像能力-清晰度(Resolution,Sharpen)
  4. 制作 macOS High Sierra 正式版 USB 启动盘的方法 (亲测可用)
  5. java中人民币的符号怎么打_打印机打印人民币符号¥
  6. kail 安装小企鹅输入法
  7. 解决There is no getter for property named ‘organization_id‘ in的报错
  8. python怎么过滤标点符号大全_一行Python代码过滤标点符号等特殊字符
  9. 国标中不能用作公差基准字母
  10. js中undefined