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学习笔记(二)——常用的辅助类相关推荐

  1. juc学习笔记二-ReentrantReadWriteLock

    1 介绍 ReentrantReadWriteLock实现了自ReadWriteLock接口,与ReentrantLock一样依赖AQS实现申请锁和释放锁.ReentrantReadWriteLock ...

  2. JUC学习笔记(二)

    JUC学习笔记(二) volatile关键字 JMM(Java Memory Model | Java内存模型) JMM同步规定 原理 工作流程 内存模型图 volatile特点 可见性 禁止指令重排 ...

  3. 【尚硅谷/周阳】JUC学习笔记

    JUC学习笔记[尚硅谷/周阳] 本文章基于B站视频教程[juc 与 jvm 并发编程 Java 必学_阳哥- 尚硅谷]进行整理记录,仅用于个人学习,交流使用. 目录标题 JUC学习笔记[尚硅谷/周阳] ...

  4. Java学习笔记二:数据类型

    Java学习笔记二:数据类型 1. 整型:没有小数部分,允许为负数,Java整型分4种:int short long byte 1.1 Int最为常用,一个Int类型变量在内存中占用4个字节,取值范围 ...

  5. 吴恩达《机器学习》学习笔记二——单变量线性回归

    吴恩达<机器学习>学习笔记二--单变量线性回归 一. 模型描述 二. 代价函数 1.代价函数和目标函数的引出 2.代价函数的理解(单变量) 3.代价函数的理解(两个参数) 三. 梯度下降- ...

  6. amazeui学习笔记二(进阶开发2)--Web组件简介Web Component

    amazeui学习笔记二(进阶开发2)--Web组件简介Web Component 一.总结 1.amaze ui:amaze ui是一个web 组件, 由模板(hbs).样式(LESS).交互(JS ...

  7. MATLAB学习笔记——二维和三维绘图

    MATLAB学习笔记--二维和三维绘图 近期练习matlab的二维和三维绘图,整理一下,以防忘记. 文章目录 MATLAB学习笔记--二维和三维绘图 一.二维绘图 1.plot命令 2.fplot 命 ...

  8. jquery学习笔记及常用函数封装

    二.JQuery 学习笔记及常用函数封装 https://download.csdn.net/download/weixin_42530002/13087988 1.JQuery入门 (1).css选 ...

  9. 学习笔记二.矩阵按键

    #学习笔记二:GPIO的探索与矩阵按键 ##1.在配置cubemx时,对gpio的配置有开漏输出和推挽输出两种方式, ###这里有一篇文章(别人的文章)讲的很详细link戳这里跳转 通俗来讲,推挽输出 ...

  10. Polyworks脚本开发学习笔记(二十)-补充几个常见操作指令的使用

    Polyworks脚本开发学习笔记(二十)-补充几个常见操作指令的使用 大概要写到结尾了,最后几篇就将手册的各常用命令再看一遍,组合一下,并列举出常见的一些有用的操作. DATA_COLOR_MAP数 ...

最新文章

  1. 链表倒数第k个节点_面试题 02.02. 返回倒数第 k 个节点
  2. Nginx 学习笔记(六)引入线程池 性能提升9倍
  3. COCO API的克隆 - http://cocodataset.org/
  4. php显示网卡信息,netwox显示网络配置信息
  5. Sublime text3配置xdebug调试记录
  6. LeetCode 94. 二叉树的中序遍历(中序遍历)
  7. ACL20 | 让笨重的BERT问答匹配模型变快!
  8. Cgi与php-Cgi以及Fast-Cgi与php-fpm的理解
  9. 11月1日上午PHP批量删除
  10. Tcl Tutorial 笔记5 ·switch
  11. 2019最新 Java商城秒杀系统的设计与实战视频教程(SpringBoot版)_1-3课程要求与收益...
  12. 分期手续费转换为年化利率
  13. Linux 下 va_start、va_end 学习及使用
  14. python渲染光线_Python光线追踪
  15. pandas学习手记-柱状图
  16. ios APP 制作流程
  17. poi-util 加强 POI 相关操作工具包
  18. C++PrimerPlus(第6版)中文版:Chapter16.4.6关联容器_setops.cpp
  19. jQuery新手入门
  20. LCT求解最小生成树

热门文章

  1. 对泊松分布的一点理解
  2. 看两宋风云,搞清了4个之前对两宋历史认识错误的地方
  3. 遥感的自然生态监测 专题
  4. 世界好疯狂呢,神奇小子,开源了他的自动驾驶软件
  5. Ubuntu系统在VMWare中鼠标闪烁的问题解决方案
  6. 蓝桥杯 算法提高 盾神与积木游戏
  7. delphi下使用indy进件socket通信的简单实例介绍
  8. 基于wincap写抓包程序
  9. 大学计算机基础教程第12章软件技术基础
  10. 计算机无法安装u盘驱动,电脑上插入u盘提示未能成功安装设备驱动程序怎么修复...