这个类是在java.util.concurrent并发包里面
允许一个或者多个线程一直等待,直到其他线程执行完成后再执行
举例:班长和5名同学都在教室里面写作业,班长必须等五个同学都走了之后,才能把教师门的锁锁上
这是通过一个计数器来实现的,计数器初始化的值为线程的数量,每当一个线程完成了自己的任务之后,计数器的值就减去1,当计数器的值减为0的时候,表示所有线程都完成了任务,此时在CountDownLatch上等待的线程就可以执行了
这个类里面有五个常用方法:
(1)构造方法:表示要等待的线程个数
public CountDownLatch(int count){
}
(2) await()方法,当前线程进入到同步队列中进行等待,直到计数器的值减到0
public void await(){
}
(3)带超时时间的await()
public void await(long timeout,TimeUnit unit){
}
(4)countDown() 方法,使计数器的值减1
public void countDown(){
}
(5)getCount()方法,获取计数器的值
public void getCount(){
}
示例;
初始化CountDownLatch的计数器值为 5
每个线程执行完,计数器的值就减1,最后减为0
运行到countDownLatch.await();这一行的时候会检查计数器的值,只要值不为0,当前线程(也就是主线程会进入阻塞态)文章来源:https://www.toymoban.com/news/detail-460968.html
public class testCountDownLatch {
public static void main(String[] args){
ExecutorService executorService= Executors.newFixedThreadPool(5);//创建大小为5的线程池
CountDownLatch countDownLatch=new CountDownLatch(5);
for(int i=0;i<5;i++)
{
executorService.execute(()->{
System.out.println(Thread.currentThread().getName()+" is running");
TimeUnit.SECONDS.sleep(1);//模拟执行业务
System.out.println(Thread.currentThread().getName()+" is over");
countDownLatch.countDown();})
}
countDownLatch.await();
System.out.println(Thread.currentThread().getName()+" is running");
executorService.shutdown();//销毁线程池
}
}
执行结果:文章来源地址https://www.toymoban.com/news/detail-460968.html
pool-1-thread-1 is running
pool-1-thread-5 is running
pool-1-thread-4 is running
pool-1-thread-2 is running
pool-1-thread-3 is running
pool-1-thread-4 is over
pool-1-thread-1 is over
pool-1-thread-5 is over
pool-1-thread-3 is over
pool-1-thread-2 is over
main is running
到了这里,关于CountDownLatch的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!