JUC学习笔记(二)——常用的辅助类
CountDownLatch(减法计数器)
计数器
具体使用,只有计数器归零了主线程才能继续向下执行(即计数器归零后,await()才会被唤醒)
public class CountDownLatchDemo {public static void main(String[] args) throws InterruptedException {CountDownLatch countDownLatch = new CountDownLatch(6);for (int i = 0; i < 6 ; i++) {new Thread(() -> {System.out.println("第" + Thread.currentThread().getName() + "人出门了") ;countDownLatch.countDown(); //数量-1}, String.valueOf(i + 1)).start();}countDownLatch.await(); //等待计数器归零,才会继续执行下去System.out.println("门关上了");}
}
CyclicBarrier(加法计数器)
加法计数器代码
public class CyclicBarrierDemo {public static void main(String[] args) {CyclicBarrier cyclicBarrier = new CyclicBarrier(7, () -> {System.out.println("召唤神龙成功");});for (int i = 0; i < 7; i++) {new Thread(() -> {System.out.println("收集了" + Thread.currentThread().getName() + "颗龙珠");try {cyclicBarrier.await();} catch (InterruptedException e) {e.printStackTrace();} catch (BrokenBarrierException e) {e.printStackTrace();}}, String.valueOf(i +1)).start();}}}
只有当七个线程中的await都执行到了才会执行cyclicBarrier的第二个参数方法,该类两个构造方法
Semaphore
Semaphore:信号量,限流使用
具体实现,抢车位,三个车位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(1);System.out.println(Thread.currentThread().getName() + "离开了车位");} catch (InterruptedException e) {e.printStackTrace();} finally {semaphore.release(); //释放}}, String.valueOf(i + 1)).start();}}
}
原理:
semaphore.acire() 获得,假设如果已经满了则等待,等待到释放为止
semaphore.release()释放,会将当前的信号量释放+1,然后唤醒等待的线程!
作用:多个共享资源互斥的使用!并发限流,控制最大的线程数!
JUC学习笔记(二)——常用的辅助类相关推荐
- juc学习笔记二-ReentrantReadWriteLock
1 介绍 ReentrantReadWriteLock实现了自ReadWriteLock接口,与ReentrantLock一样依赖AQS实现申请锁和释放锁.ReentrantReadWriteLock ...
- JUC学习笔记(二)
JUC学习笔记(二) volatile关键字 JMM(Java Memory Model | Java内存模型) JMM同步规定 原理 工作流程 内存模型图 volatile特点 可见性 禁止指令重排 ...
- 【尚硅谷/周阳】JUC学习笔记
JUC学习笔记[尚硅谷/周阳] 本文章基于B站视频教程[juc 与 jvm 并发编程 Java 必学_阳哥- 尚硅谷]进行整理记录,仅用于个人学习,交流使用. 目录标题 JUC学习笔记[尚硅谷/周阳] ...
- Java学习笔记二:数据类型
Java学习笔记二:数据类型 1. 整型:没有小数部分,允许为负数,Java整型分4种:int short long byte 1.1 Int最为常用,一个Int类型变量在内存中占用4个字节,取值范围 ...
- 吴恩达《机器学习》学习笔记二——单变量线性回归
吴恩达<机器学习>学习笔记二--单变量线性回归 一. 模型描述 二. 代价函数 1.代价函数和目标函数的引出 2.代价函数的理解(单变量) 3.代价函数的理解(两个参数) 三. 梯度下降- ...
- amazeui学习笔记二(进阶开发2)--Web组件简介Web Component
amazeui学习笔记二(进阶开发2)--Web组件简介Web Component 一.总结 1.amaze ui:amaze ui是一个web 组件, 由模板(hbs).样式(LESS).交互(JS ...
- MATLAB学习笔记——二维和三维绘图
MATLAB学习笔记--二维和三维绘图 近期练习matlab的二维和三维绘图,整理一下,以防忘记. 文章目录 MATLAB学习笔记--二维和三维绘图 一.二维绘图 1.plot命令 2.fplot 命 ...
- jquery学习笔记及常用函数封装
二.JQuery 学习笔记及常用函数封装 https://download.csdn.net/download/weixin_42530002/13087988 1.JQuery入门 (1).css选 ...
- 学习笔记二.矩阵按键
#学习笔记二:GPIO的探索与矩阵按键 ##1.在配置cubemx时,对gpio的配置有开漏输出和推挽输出两种方式, ###这里有一篇文章(别人的文章)讲的很详细link戳这里跳转 通俗来讲,推挽输出 ...
- Polyworks脚本开发学习笔记(二十)-补充几个常见操作指令的使用
Polyworks脚本开发学习笔记(二十)-补充几个常见操作指令的使用 大概要写到结尾了,最后几篇就将手册的各常用命令再看一遍,组合一下,并列举出常见的一些有用的操作. DATA_COLOR_MAP数 ...
最新文章
- 链表倒数第k个节点_面试题 02.02. 返回倒数第 k 个节点
- Nginx 学习笔记(六)引入线程池 性能提升9倍
- COCO API的克隆 - http://cocodataset.org/
- php显示网卡信息,netwox显示网络配置信息
- Sublime text3配置xdebug调试记录
- LeetCode 94. 二叉树的中序遍历(中序遍历)
- ACL20 | 让笨重的BERT问答匹配模型变快!
- Cgi与php-Cgi以及Fast-Cgi与php-fpm的理解
- 11月1日上午PHP批量删除
- Tcl Tutorial 笔记5 ·switch
- 2019最新 Java商城秒杀系统的设计与实战视频教程(SpringBoot版)_1-3课程要求与收益...
- 分期手续费转换为年化利率
- Linux 下 va_start、va_end 学习及使用
- python渲染光线_Python光线追踪
- pandas学习手记-柱状图
- ios APP 制作流程
- poi-util 加强 POI 相关操作工具包
- C++PrimerPlus(第6版)中文版:Chapter16.4.6关联容器_setops.cpp
- jQuery新手入门
- LCT求解最小生成树