CountDownLatch 使用详解

简介: 本文主要对CountDownLatch 的相关知识点进行了介绍和讲解

一、什么是CountDownLatch

CountDownLatch是一个计数器,它允许一个或多个线程等待其它线程完成操作。它通常用来实现一个线程等待其它多个线程完成操作之后再继续执行的操作。

常见的应用场景是开启多个线程同时执行某个任务,等到所有任务执行完再执行特定操作,如汇总统计结果。

二、代码实现

importjava.util.concurrent.CountDownLatch;
importjava.util.concurrent.TimeUnit;
publicclassCountDownLatchDemo {
staticfinalintN=4;
staticCountDownLatchlatch=newCountDownLatch(N);
publicstaticvoidmain(String[] args) throwsInterruptedException {
for (inti=0; i<N; i++) {
newThread(newThread1()).start();
        }
latch.await(5000, TimeUnit.MILLISECONDS);
// 调用await()方法的线程会被挂起,它会等待直到count值为0才继续执行;等待timeout时间后count值还没变为0的话就会继续执行System.out.println("数据汇总完成 ------------");
    }
staticclassThread1implementsRunnable {
@Overridepublicvoidrun() {
try {
System.out.println(Thread.currentThread().getName() +"开始读取数据,处理==========");
Thread.sleep(1000);
            } catch (InterruptedExceptione) {
e.printStackTrace();
            } finally {
latch.countDown();
            }
        }
    }
}

三、打印结果

Thread-0开始读取数据,处理==========Thread-3开始读取数据,处理==========Thread-2开始读取数据,处理==========Thread-1开始读取数据,处理==========数据汇总完成------------Processfinishedwithexitcode0

四、CyclicBarrier和CountDownLatch区别

CyclicBarrier 和 CountDownLatch 都能够实现线程之间的等待。

CountDownLatch用于某个线程等待其他线程执行完任务再执行。CyclicBarrier用于一组线程互相等待到某个状态,然后这组线程再同时执行。 CountDownLatch的计数器只能使用一次,而CyclicBarrier的计数器可以使用reset()方法重置,可用于处理更为复杂的业务场景。

相关文章
并发与并行的区别(详细介绍)
并发与并行的区别(详细介绍)
10466 0
|
编解码 算法 Java
构建高效的Android应用:内存优化策略详解
随着智能手机在日常生活和工作中的普及,用户对移动应用的性能要求越来越高。特别是对于Android开发者来说,理解并实践内存优化是提升应用程序性能的关键步骤。本文将深入探讨针对Android平台的内存管理机制,并提供一系列实用的内存优化技巧,以帮助开发者减少内存消耗,避免常见的内存泄漏问题,并确保应用的流畅运行。
|
JSON Go 数据格式
【Golang】解决使用interface{}解析json数字会变成科学计数法的问题
【2月更文挑战第9天】解决使用interface{}解析json数字会变成科学计数法的问题
466 0
|
Java
Springboot集成SpringCloud启动后Eureka报错
Springboot集成SpringCloud启动后Eureka报错
519 0
Springboot集成SpringCloud启动后Eureka报错
|
9月前
|
Java 物联网 程序员
还在纠结抽象类和接口?看这篇就够了!
本文从一位程序员的角度出发,讲述了其小学弟在Java开发面试中遇到的难题——抽象类与接口的区别。文章不仅详细解析了两者的定义、特点及主要差异,还提供了实际开发中的应用场景和面试答题技巧,帮助读者更好地理解和应用这一重要知识点。
1377 12
|
12月前
|
Docker 容器
Docker安装及镜像源修改
本文介绍了Docker的安装过程和如何修改Docker镜像源以加速下载。包括更新系统包、安装所需软件包、设置yum源、安装Docker以及验证安装是否成功。接着,提供了修改Docker镜像源的步骤,包括创建配置文件、编辑配置文件以设置镜像加速地址,并提供了几个常用的国内镜像源地址。最后,通过重启Docker服务和检查配置是否生效来完成镜像源的修改。
Docker安装及镜像源修改
|
负载均衡 监控 Java
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
23415 7
SpringCloud常见面试题(一):SpringCloud 5大组件,服务注册和发现,nacos与eureka区别,服务雪崩、服务熔断、服务降级,微服务监控
|
12月前
|
机器学习/深度学习 自然语言处理 搜索推荐
基于图神经网络的电商购买预测
基于图神经网络的电商购买预测
|
关系型数据库 MySQL 数据库
探究数据库开源协议:PostgreSQL vs MySQL
探究数据库开源协议:PostgreSQL vs MySQL
Pyside6-第九篇-QTextEdit多行文本编辑器
Pyside6-第九篇-QTextEdit多行文本编辑器
705 0