全部
技术
PHP
MySQL
前端
Linux
JAVA
工具
纪念日计算器
邮记星
个人记账
笔记侠
历史上的今天
生日密码
生日书
生日密码
生日花语
博古通今
三十六计
鬼谷子
笑林广记
本草纲目
山海经
唐诗宋词
宋词300首
唐诗300首
退出
登录
注册
编辑文章
选择分类
PHP
MySQL
前端
Linux
Java
工具
选择专栏
设计模式
java基础
Angular学习
Java面试题
描述:
java countDownLatch概念
封面图上传 :
+
点击上传图片
#### java countDownLatch概念 - countDownLatch这个类使一个线程等待其他线程各自执行完毕后再执行。 - 是通过一个计数器来实现的,计数器的初始值是线程的数量。每当一个线程执行完毕后,计数器的值就-1,当计数器的值为0时,表示所有线程都执行完毕,然后在闭锁上等待的线程就可以恢复工作了。 ### 例子 班长最后走锁门的例子,有6个同学上晚自习,班长必须等6个同学都走完才能锁门,不然把其中一个锁教室了班长就等着被骂娘。 #### 代码实现 - 一般情况,可能出现班长把其中几个人锁教室了,这样时不行的 ```java package com.bowen; public class CountDownLatchDemo { public static void main(String[] args) { for (int i = 1; i <= 6; i++) { new Thread(()->{ System.out.println(Thread.currentThread().getName()+" 同学上完晚自习离开"); },String.valueOf(i)).start(); } System.out.println(Thread.currentThread().getName()+" 班长锁门离开"); } } //结果 //6 同学上完晚自习离开 //3 同学上完晚自习离开 //2 同学上完晚自习离开 //1 同学上完晚自习离开 //main 班长锁门离开 //5 同学上完晚自习离开 //4 同学上完晚自习离开 ``` - 修改后,一定等到6个同学都走完,班长才锁门 ```java package com.bowen; import java.util.concurrent.CountDownLatch; public class CountDownLatchDemo { public static void main(String[] args) throws InterruptedException { CountDownLatch countDownLatch = new CountDownLatch(6);//初始化 cout为6 for (int i = 1; i <= 6; i++) { new Thread(()->{ System.out.println(Thread.currentThread().getName()+" 同学上完晚自习离开"); countDownLatch.countDown();//走一个减一 },String.valueOf(i)).start(); } countDownLatch.await();//减到0才不会再等待 System.out.println(Thread.currentThread().getName()+" 班长锁门离开"); } } //结果 //6 同学上完晚自习离开 //5 同学上完晚自习离开 //2 同学上完晚自习离开 //1 同学上完晚自习离开 //4 同学上完晚自习离开 //3 同学上完晚自习离开 //main 班长锁门离开 ```
保存文章