CountDownLatch 含义:计数器
CountDownLatch类位于Java.util.concurrent.CountDownLatch包中
CountDownLatch countdownlatch = new CountDownLatch(int);
该对象的使用需要传入一个int类型的参数,此处int类型的参数主要代表的是最高容纳量,即等待的线程数量。
当这些等待的线程结束后,倒计时清零,才向下执行下面的代码命令
countdownlatch.countdown(); //进行减一操作
每运行一个线程,就执行减一操作,直到规定的等待线程数量归零
semapore.await(); //阻塞方法
当所有等待线程运行结束后,即计数器归零后,释放所有等待线程,继续向下执行代码
相当于晚自习关门,负责关门的同学相当于await()方法,等待班级内同学走出教室,进行关门,每一个同学相当于一个线程,等待这几名同学。每一个同学走出教室,相当于countDown()方法进行减一,表示教室内的同学减少一个。只有所有的同学走出教室,才可执行关门。当所有的同学走出,await()发现计数器已经归零,执行关门。
public class Demo03 {
public static void main(String[] args) {
//创建一个CountDownLatch对象
CountDownLatch countdownlatch =new CountDownLatch(6);
//创建线程
for (int i = 1; i <=6; i++) {
new Thread(()->{
System.out.println(Thread.currentThread().getName()+":已出门");
//进行减一操作
countdownlatch.countDown();
},String.valueOf(i)+"号同学").start();
}
try {
countdownlatch.await(); //待计数器归零时,执行下面方法
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("管理员关闭门!");
}
}
运行结果