Java_JUC_CountDownLatch/CyclicBarrier循环屏障/Semaphore信号灯/枚举

java常用的juc api

(一)枚举

1.1 代码实现

package jucapi;import lombok.Getter;/*** 枚举 就是一张数据库的表* 用了枚举可以降低程序的耦合度** 主要是给CountDownLatchDemo用的*/public enum CountryEnum{ONE(1,"齐"), TWO(2,"楚"), THREE(3,"燕"), FOUR(4,"赵"), FIVE(5,"魏"), SIX(6,"韩");@Getter private Integer retCode;   //1@Getter private String retMessage; //齐@Getter private String retMessage2;CountryEnum(Integer retCode, String retMessage) {this.retCode = retCode;this.retMessage = retMessage;}/*** CountDownLatchDemo 调用的方法* @param index 1* @return 齐*/public static CountryEnum forEach_CountryEnum(int index){//变数组CountryEnum[] myArray = CountryEnum.values();//增强for循环//如果CountDownLatchDemo传过来的index是1,那么我返回“齐”for(CountryEnum element:myArray){if(index == element.getRetCode()){return element;}}return null;}/*** get set* @return*/public Integer getRetCode() {return retCode;}public void setRetCode(Integer retCode) {this.retCode = retCode;}public String getRetMessage() {return retMessage;}public void setRetMessage(String retMessage) {this.retMessage = retMessage;}}/**mysql daNmae = CountryEnumtableoneID userName age birth userEmail1  齐       109ONE(1,"齐",v2,v3,v4,v5)*/

(二)CountDownLatch

2.1 什么是CountDownLatch?

让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒。

2.2 方法

  • //大招step1
    CountDownLatch countDownLatch = new CountDownLatch(6);
  • //大招step2
    countDownLatch.countDown();
  • //大招step3
    countDownLatch.await();

一个或多个调用await方法的线程会被阻塞,

其它线程调用countDown方法会将计数器减1(该线程不会阻塞),

当计数器的值变为0时,因调用await方法被阻塞的线程会被唤醒,继续执行。

2.3 代码实现

package jucapi;import java.util.concurrent.CountDownLatch;/*** java 常用的JUC api* CountDownLatch先看 closeDoor()** 用了枚举可以降低程序的耦合度** 需要用到自写的一个枚举*/
public class CountDownLatchDemo {public static void main(String[] args) throws InterruptedException {//大招step1CountDownLatch countDownLatch = new CountDownLatch(6);for(int i=1;i<=6;i++){//哪个线程用枚举new Thread(()->{System.out.println(Thread.currentThread().getName() + "\t国被灭");//大招step2 计数减1countDownLatch.countDown();},CountryEnum.forEach_CountryEnum(i).getRetMessage()).start();  //线程名字调用了枚举}//大招step3countDownLatch.await();System.out.println(Thread.currentThread().getName()+"\t--------秦,一统华夏");System.out.println(CountryEnum.ONE);System.out.println(CountryEnum.ONE.getRetCode());System.out.println(CountryEnum.ONE.getRetMessage());}/*** CountDownLatch* 用于理解的最简单的例子* @throws InterruptedException*/public static void closeDoor() throws InterruptedException {//大招step1CountDownLatch countDownLatch = new CountDownLatch(6);for(int i=1;i<=6;i++){new Thread(()->{System.out.println(Thread.currentThread().getName()+"\t上完晚自习,走人");//大招step2countDownLatch.countDown();},String.valueOf(i)).start();}//大招step3countDownLatch.await();System.out.println(Thread.currentThread().getName()+"\t班长关门走人");}}/*
赵   国被灭
韩   国被灭
燕   国被灭
魏   国被灭
齐   国被灭
楚   国被灭
main    --------秦,一统天下
ONE
1
齐*/

(三)CyclicBarrier循环屏障

3.1 什么是CyclicBarrier?

做加法:集齐七龙珠,才能召唤神龙。

3.2 方法

  • //大招step1
    CyclicBarrier cyclicBarrier=new CyclicBarrier(7,()->{ System.out.println(“***********召唤神龙”); });

  • //大招step2 先来的等待

​ cyclicBarrier.await();

3.3 代码实现

package jucapi;import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;/*** CyclicBarrier* 翻译:循环屏障** 集齐七龙珠,才能召唤神龙* 先到的线程,先等着*/public class CyclicBarrierDemo {public static void main(String[] args) {//大招step1//CyclicBarrier(int parties, Runnable barrierAction)//注 Runnable接口的最好用lambda表达式CyclicBarrier cyclicBarrier=new CyclicBarrier(7,()->{ System.out.println("***********召唤神龙"); }); //必须要有接收for(int i=1;i<=7;i++) {final int tempInt = i;new Thread(() -> {System.out.println(Thread.currentThread().getName()+"\t收到第:"+tempInt+"颗龙珠");//大招step2 先来的等待try {cyclicBarrier.await();} catch (InterruptedException e) {e.printStackTrace();} catch (BrokenBarrierException e) {e.printStackTrace();}},String.valueOf(i)).start();}}}/*
1   收到第:1颗龙珠
5   收到第:5颗龙珠
3   收到第:3颗龙珠
6   收到第:6颗龙珠
7   收到第:7颗龙珠
2   收到第:2颗龙珠
4   收到第:4颗龙珠
***********召唤神龙*/

(四)Semaphore信号灯

4.1 什么是Semaphore?

6辆车枪3个车位,直到6辆车都停过3秒为止,多个线程抢占多份资源

4.2 方法

  • //大招step1 模拟三个车位
    Semaphore semaphore = new Semaphore(3);

  • //大招step2 线程去获得车位
    semaphore.acquire();

  • //大招step3 线程3后去释放车位
    semaphore.release();

4.3 代码实现

package jucapi;import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;/*** SemaphoreDemo 信号灯* 解释:6辆车枪3个车位,直到6辆车都停过3秒为止,多个线程抢占多份资源** 有减有增,有增有减** 用好了完全可以代替synchronize锁等**/
public class SemaphoreDemo {public static void main(String[] args) {//大招step1 模拟三个车位Semaphore semaphore = new Semaphore(3);for(int i=1;i<=6;i++) {new Thread(() -> {try {//大招step2 线程去获得车位semaphore.acquire();System.out.println(Thread.currentThread().getName()+"\t获得车位");//休眠3秒TimeUnit.SECONDS.sleep(3);System.out.println(Thread.currentThread().getName()+"\t停车3秒后离开车位");} catch (InterruptedException e) {e.printStackTrace();} finally {//大招step3 线程去释放车位semaphore.release();}}, String.valueOf(i)).start();}}}/*
1   获得车位
5   获得车位
2   获得车位
5   停车3秒后离开车位
1   停车3秒后离开车位
6   获得车位
2   停车3秒后离开车位
3   获得车位
4   获得车位
4   停车3秒后离开车位
3   停车3秒后离开车位
6   停车3秒后离开车位*/
如果你发现

Java_JUC_CountDownLatch/CyclicBarrier循环屏障/Semaphore信号灯/枚举相关推荐

  1. 并发编程之循环屏障CyclicBarrier

    文章目录 前言 什么是CyclicBarrier CyclicBarrier原理 CyclicBarrier VS CountDownLatch CountDownLatch图示: CyclicBar ...

  2. java count 在哪一类里_java 5线程中 Semaphore信号灯,CyclicBarrier类,CountDownLatch计数器以及Exchanger类使用...

    先来讲解一下Semaphore信号灯的作用: 可以维护当前访问自身的线程个数,并提供了同步机制, 使用semaphore可以控制同时访问资源的线程个数 例如,实现一个文件允许的并发访问数. 请看下面的 ...

  3. java 多线程分段等待执行完成状况,循环屏障CyclicBarrier | Java工具类

    目录 前言 Maven依赖 代码 总结 前言 工作中是否有这样的场景,多个线程任务,如果所有线程完成到某个阶段,你希望知道所有线程均完成该阶段.当然你使用线程计数可以实现,只是不够优雅. 所以我即:j ...

  4. Java并发工具类-循环屏障CyclicBarrier

    CyclicBarrier简介 CyclicBarrier API 构造方法 await方法 reset方法 使用样例 CyclicBarrier源码详解 CyclicBarrier中属性 构造方法及 ...

  5. Java多线程编程-(6)-两种常用的线程计数器CountDownLatch和循环屏障CyclicBarrier

    前几篇: Java多线程编程-(1)-线程安全和锁Synchronized概念 Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性 Java多线程编程-(3)-线程本地Th ...

  6. 并发编程-18AQS同步组件之 CyclicBarrier 同步屏障

    文章目录 J.U.C脑图 CyclicBarrier CyclicBarrier的应用场景 示例 await await(long timeout, TimeUnit unit) CyclicBarr ...

  7. 同步工具之CyclicBarrier循环栅栏

    CyclicBarrier 的字面意思是可循环使用(Cyclic)的屏障(Barrier).它要做的事情是,让一组线程到达一个屏障(也可以叫同步点)时被阻塞,直到最后一个线程到达屏障时,屏障才会开门, ...

  8. Objective-C 高性能的循环遍历 forin - NSEnumerator - 枚举 优化

    Cocoa编程的一个通常的任务是要去循环遍历一个对象的集合  (例如,一个 NSArray, NSSet 或者是 NSDictionary). 这个看似简单的问题有广泛数量的解决方案,它们中的许多不乏 ...

  9. python的枚举和for循环_python入门与进阶篇(三)之分支、循环、条件与枚举,python枚举...

    python入门与进阶篇(三)之分支.循环.条件与枚举,python枚举 python开发工具 IDE Vscode插件官网 https://marketplace.visualstudio.com/ ...

最新文章

  1. MSCKF-Based Visual-Wheel Odometry 轮速视觉融合里程计
  2. html img 指定旋转角度_ALLEN老师自动化测试小课堂 | 生成HTML可视化报告的两个常见模块...
  3. Flask框架 之abort、自定义错误、视图函数返回值与jsonify
  4. vc 通过句柄修改窗口大小_VC应用(1)通过VC修改销售订单行项目的字段
  5. 如果人工智能最终将毁灭人类,挽救人类你能做什么?
  6. SharePoint 2013 添加Ribbon菜单
  7. 互联网大厂与编程语言
  8. SQL存储过程和函数区别(超级简单,人人都可以看懂)
  9. 关于 Activity 中 must implement OnFragmentInteractionListener 的问题
  10. 计算机设计大赛 app一等奖,广商学子在大学生计算机设计大赛中喜获一等奖
  11. 解决Extraneous non-props attributes (border, class) were passed to component but could not be
  12. 建群网培PMP每日一练2020-7-17
  13. A40i linux移植ssh报错
  14. Android TabLayout设置选中状态标题字体大小,粗细
  15. 【数值分析】复化积分公式
  16. 2022-03-30 StackOverflowError与OutOfMemoryError详解
  17. 一进二出宿舍限电模块的基本功能
  18. App推广技巧之渠道免费资源
  19. Jzoj4210 我才不是萝莉控呢
  20. 树莓派3 打造定时播报电台音乐闹钟、天气等

热门文章

  1. 程序员应该了解的 “基金” 小常识
  2. 数据挖掘算法之时间序列算法(平稳时间序列模型,AR(p),MA(q),(平稳时间序列模型,AR(p),MA(q),ARMA(p,q)模型和非平稳时间序列模型,ARIMA(p,d,q)模型)学习笔记梳理
  3. 解决ifconfig命令下只出现lo本地环回的问题
  4. AIoT在智慧景区中的应用
  5. HDU 1864 最大报销额 (dp 01背包)
  6. 科普向 | Lucene,Solr,Elasticsearch之间的区别和联系
  7. mysql中的mul
  8. 数字信号处理的MATLAB实践(一)语音信号的录制和读取
  9. EMUI10的分布式技术:跨越互联、连接万物
  10. 文献检索是利用计算机对文献,《文献检索与利用》教学大纲(文)