PHP技术那点事
全部
技术
PHP
MySQL
前端
Linux
JAVA
退出
编辑文章
选择分类
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 班长锁门离开 ```
保存文章