1.查看api
这是一个指定线程执行次数的类,通过await和countDown方式来管理执行次数
2.查看该类的方法
3.例子
线程必须执行三次
/**
* @description 测试CountDownLatch类
* @author hy
* @date 2019-10-12
*/
public class CountDownLatchTest {
// 创建一个计数器类,必须执行3次才能停止完毕
CountDownLatch cdl = new CountDownLatch(3);
/**
* 这个类就是用来规定当前的线程必须执行相应的次数才能停止,否则就会阻塞主线程
*/
@Test
public void testCountDownLatch() {
new Thread(new MyThread()).start();//启动线程
try {
cdl.await();//开始等待执行完毕
} catch (InterruptedException e) {
e.printStackTrace();
}
}
//创建自定义的线程用来执行任务
class MyThread implements Runnable {
@Override
public void run() {
for (int i = 0; i < 3; i++) {
cdl.countDown();//这里是让计数器减减操作
System.out.println("线程正在执行:i=" + (i));
}
System.out.println("线程已完成三次任务!");
}
}
}
结果
4.简化为lambda表达式
@Test
public void testCountDownLatch() {
new Thread(()-> {
for (int i = 0; i < 3; i++) {
cdl.countDown();//这里是让计数器减减操作
System.out.println("线程正在执行:i=" + (i));
}
System.out.println("线程已完成三次任务!");
} ).start();
try {
cdl.await();//开始等待执行完毕
} catch (InterruptedException e) {
e.printStackTrace();
}
}
如果当前的CountDownLatch规定的次数为4次就会出现主线程阻塞!
5.总结
1.CountDownLatch类通过构造函数执行当前任务必须执行的CountDown方法
的次数
2.CountDownLatch通过await开始阻塞主线程
,如果未执行到指定的次数
,则主线程一直处于阻塞状态
3.CountDownLatch这个类可以用来规定当前线程必须执行任务到一定的次数
,以此来完成某项任务!(这是一个线程计数器)
以上纯属个人见解,如有问题请联系本人!