Java多线程之CountDownLatch用法


本文目录:

  1. CountDownLatch基本概念
  2. CountDownLatch案例:6个同学陆续离开教室后班长才可以关门
  3. CountDownLatch案例:秦灭6国,一统华夏

1. CountDownLatch基本概念

1. 让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒。
2. CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,这些线程会阻塞。其它线程调用countDown方法会将计数器减1(调用countDown方法的线程不会阻塞),当计数器的值变为0时,因await方法阻塞的线程会被唤醒,继续执行。

2. CountDownLatch案例:6个同学陆续离开教室后班长才可以关门

实现:

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()+"\t 同学离开教室");countDownLatch.countDown();},String.valueOf(i)).start();}countDownLatch.await();System.out.println(Thread.currentThread().getName()+"\t 班长关门走人");}
}

编译结果


3. CountDownLatch案例:秦灭6国,一统华夏

  1. 六国我们用枚举模拟,具体代码如下:
public enum CountryEnums {ONE(1,"韩"),TWO(2,"魏"),THREE(3,"赵"),FOUR(4,"齐"),FIVE(5,"楚"),SIX(6,"燕");private Integer retCode;private String retMessage;CountryEnums(Integer retCode, String retMessage) {this.retCode = retCode;this.retMessage = retMessage;}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;}public static CountryEnums forEachCountryEnums(Integer index){for (CountryEnums element: values()) {if (element.getRetCode() == index){return element;}}return null;}
}

主体代码:

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()+"\t 国被灭亡");countDownLatch.countDown();},CountryEnums.forEachCountryEnums(i).getRetMessage()).start();}countDownLatch.await();System.out.println(Thread.currentThread().getName()+"\t 秦,统一华夏");System.out.println("------------------");//枚举测试代码System.out.println(CountryEnums.ONE);System.out.println(CountryEnums.ONE.getRetCode());System.out.println(CountryEnums.ONE.getRetMessage());}

编译结果:

Java多线程之CountDownLatch用法相关推荐

  1. Java多线程之Semaphore用法

    Java多线程之Semaphore用法 本文目录: Semaphore基本概念 Semaphore使用案例:3个停车位,6辆车去抢,走一辆,抢一个停车位. 1. Semaphore基本概念 在信号量上 ...

  2. Java多线程之CyclicBarrier用法

    Java多线程之CyclicBarrier用法 本文目录 CyclicBarrier的基本概念 CyclicBarrier的案例:集齐7颗龙珠就可以召唤神龙 1. CyclicBarrier的基本概念 ...

  3. (十)java多线程之CountDownLatch

    目录 引言 理论 例子 打赏 本人邮箱: kco1989@qq.com 欢迎转载,转载请注明网址 http://blog.csdn.net/tianshi_kco github: https://gi ...

  4. 高级JAVA - 多线程之CountDownLatch

    package com.xbz.thread.juc.countDownLatch;import java.util.concurrent.CountDownLatch;/*** @title Cou ...

  5. JAVA多线程之CountDownLatch

    前序: 上周测试给开发的同事所开发的模块提出了一个bug,并且还是偶现. 经过仔细查看代码,发现是在业务中启用了多线程,2个线程同时跑,但是新启动的2个线程必须保证一个完成之后另一个再继续运行,才能消 ...

  6. java多线程之CountDownLatch倒数闸门

    在多个线程进行协作时,一个常见的情景是一个线程需要等待另外的线程完成某些任务之后才能继续进行.在这种情况下,可以使用CountDownLatch类,CountDownLatch类相当于多个线程等待开启 ...

  7. JAVA多线程之wait/notify

    本文主要学习JAVA多线程中的 wait()方法 与 notify()/notifyAll()方法的用法. ①wait() 与 notify/notifyAll 方法必须在同步代码块中使用 ②wait ...

  8. Java多线程之Callable、Future和FutureTask

    Java多线程之Callable接口 自己想总结一下的,看到一篇总结的更好的博客,就转载了,突然感觉真轻松,哈哈哈哈 文章转载于:Matrix海子:Java并发编程:Callable.Future和F ...

  9. Java多线程之Synchronized和Lock的区别

    Java多线程之Synchronized和Lock的区别 目录: 原始构成 使用方法 等待是否可以中断 加锁是否公平 锁绑定多个条件Condition 小结:Lock相比较Synchronized的优 ...

最新文章

  1. 使用 bcp 指定数据文件中的前缀长度
  2. Go 获取键盘输入,进制转换
  3. h桥控制电机刹车_082 电机驱动桥集成式的结构,定速比10左右,松油门或轻踩刹车瞬间,出现齿轮撞击的情况,是什么原因导致的?应该采取什么措施?...
  4. 专家:大数据等新技术助力信息融合
  5. 求子数组的最大和要求O(n)
  6. 蓝桥杯小朋友排队java_1215. 小朋友排队
  7. 【机器人】项目疑难杂症
  8. python矩阵连乘_动态规划:矩阵连乘问题
  9. java 获取农历日期
  10. 美团外卖推荐系统之智能流量分发的实践与探索
  11. C++stoul、stoull 函数用法
  12. [bzoj5473] 仙人掌
  13. python邮箱自动发送
  14. 【改】[火光摇曳]神奇的伽玛函数(上)——markdown排版
  15. tensorflow自定义op:梯度
  16. Service Mesh 发展趋势:云原生中流砥柱
  17. execution切入点表达式
  18. python求矩阵的谱半径
  19. [渝粤教育] 南京工业大学 有机化学实验 参考 资料
  20. [NOI 2004]郁闷的出纳员

热门文章

  1. 多线程编程: Compare And Swap (CAS)
  2. 沟通CTBS助六和集团实现财务集中管理
  3. CodeForces - 724C Ray Tracing(扩展欧几里得解方程)
  4. 中石油训练赛 - Fermat‘s Optimization Problem(Java高精度运算+二分)
  5. 中石油训练赛 - Edit Distance(思维+构造)
  6. HDU - 4027 Can you answer these queries?(线段树)
  7. 对pca降维后的手写体数字图片数据分类_python机器学习API介绍13: 数据降维及主成分分析...
  8. emlog充值插件_常用十大必备Emlog插件
  9. PAT ---- 1029. 旧键盘(20)
  10. (三)Boost库之字符串处理