java并发-CountDownLatch

『死磕Java并发编程系列』并发编程工具类之CountDownLatch 《死磕 Java 并发编程》系列连载中,大家可以关注一波: ????????『死磕Java并发编程系列』 01 十张图告诉你多线程那些破事 『死磕Java并发编程系列』 02 面试官:说说什么是Java内存模型? 『死磕Java并发编程系列』 03 面试必问的CAS原理你会了吗? 『死磕Java并发编程系列』 04 面试官:说说Atomic原子类的实现原理? ????????『死磕Java并发编程系列』 05 图解Java中那18 把锁 在日常编码中,Java 并发编程可是少不了,试试下面这些并 阅读详情

## 1. 简介

CountDownLatch是Java并发包中提供的一种同步工具类。它允许一个或多个线程等待一组操作完成。CountDownLatch通过一个计数器来实现,当计数器到达0时,处于等待状态的线程就会被唤醒。

## 2. 底层实现

CountDownLatch使用了cas技术,底层是通过AQS(AbstractQueuedSynchronizer)实现的。其核心思想是等待一个或多个线程完成某一操作。在CountDownLatch内部,存在一个计数器,初始值由使用者设定,内部实现了acquire和release操作。这里就不过多讲述具体的AQS实现,感兴趣的读者可以参考Java并发编程实战。

## 3. 与CyclicBarrier的区别

CountDownLatch和CyclicBarrier都是Java中的同步工具类,但是它们之间存在一些区别:

1. CountDownLatch是一次性的,计数器的值减为0后,就无法再次使用。而CyclicBarrier是可重用的,计数器的值减为0后,可以重置并再次使用。

2. CountDownLatch的计数器是顺序倒减的,而CyclicBarrier的计数器是可循环的。

3. CountDownLatch是一次等待,线程等待多少次唤醒多少次,而CyclicBarrier是多次等待,线程等待一次,唤醒多次。

## 4. 应用场景

CountDownLatch在多线程场景下用的非常多,主要是用于等待一个或多个操作完成后再进行后续操作,比如:

1. 线程池主线程等待所有子线程执行完毕后再进行其他操作。

2. 主线程等待各个库存线程将各个库存的数据处理完成后再进行后续的业务操作。

3. 数据库连接池管理器,等待多个连接释放后再进行后续的操作。

## 5. 示例代码

下面是一个简单的CountDownLatch的例子,使用了2个线程协同工作,主线程等待两个线程都执行完毕后再输出"All threads have finished."

```java
import java.util.concurrent.CountDownLatch;

public class CountDownLatchExample {
    public static void main(String[] args) throws InterruptedException {
        CountDownLatch countDownLatch = new CountDownLatch(2);
        new Thread(() -> {
            System.out.println("Thread 1 starts working!");
            try {
                Thread.sleep(2000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("Thread 1 finished working!");
            countDownLatch.countDown();
        }).start();

        new Thread(() -> {
            System.out.println("Thread 2 starts working!");
            try {
                Thread.sleep(3000);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
            System.out.println("Thread 2 finished working!");
            countDownLatch.countDown();
        }).start();

        countDownLatch.await();
        System.out.println("All threads have finished.");
    }
}
```

输出结果:

```
Thread 1 starts working!
Thread 2 starts working!
Thread 1 finished working!
Thread 2 finished working!
All threads have finished.
```

以上就是CountDownLatch的使用介绍、实现原理和应用场景,希望对您有所帮助。

Java并发CountDownLatch和CyclicBarrier 文章目录一.简介二.CountDownLatch三.CyclicBarrier四.总结 一.简介 CountDownLatch和CyclicBarrier是jdk concurrent包下工具类,提供一种控制并发流程的工具。 二.CountDownLatch 构造类,常用api public CountDownLatch(int count) { }; //参数count为计数值 public void await() throws InterruptedException { }; //调用awa 阅读详情

相关推荐

接入 deepseek 实现AI智能问诊

必须包含user角色,用于传递用户输入。system角色可选,用于设置对话背景。多轮对话需要将历史记录添加到messages中。

weixin_51326478的博客 6541

JAVA 多线程编程之CountDownLatch

CountDownLatch 是一个非常实用的线程同步工具,在多线程编程中有着广泛的应用。它基于计数器的原理实现,通过等待计数器的值变成 0 来实现线程的同步和协作。在使用 CountDownLatch 时,需要注意初始计数值的设定和 countDown() 和 await() 方法的使用。本文介绍了 CountDownLatch 的基本原理和用法,并通过示例代码演示了它的使用。希望本文能够帮助读者更好地理解和应用 CountDownLatch,在实际的项目中提高多线程编程的效率和质量。

m88997766的博客 770

程序设计二(面向对象)_实训10_复杂类的实现_ArrayList类的实现

第1关:构造函数与析构函数的实现

2401_83406306的博客 819

Java多线程-CountDownLatch

介绍 CountDownLatch是一个同步辅助类,它允许一个或多个线程一直等待直到其他线程执行完毕才开始执行。 用给定的计数初始化CountDownLatch,其含义是要被等待执行完的线程个数。 每次调用CountDown(),计数减1 主程序执行到await()函数会阻塞等待线程的执行,直到计数为0 场景 1:多线程读取批量文件, 并且读取完成之后汇总处理 2:多线程读取Excel多个sheet,读取完成之后获取汇总获取的结果 3:多个人一起一起来吃饭,主人等待客人到来,客人一个个从不同地方来到饭店,主

weixin_45203607的博客 3019

VS Code + EIDE + Clangd 构建 Keil/MDK 嵌入式开发新范式

嵌入式C/C++开发长期受限于传统IDE的语法理解弱、导航卡顿、跨工程复用难等问题。Clangd作为基于AST的现代语言服务器,结合EIDE对Keil uVision和ARM MDK工程文件(.uvprojx)的深度解析能力,可将编译配置、芯片型号、内存模型、扩展关键字等语义精准翻译为标准compile_commands.json,从而实现智能跳转、宏展开识别、结构体实时展开等高阶编辑体验。该方案不替换Keil/MDK编译与烧录流程,仅升级代码理解层,天然兼容STC8051、STM32 Cortex-M、G

weixin_34321753的博客 352

Halcon-AOI外观缺陷检测系列

Halcon-AOI外观缺陷检测系列

Jumy_S的博客 1664

Java 多线程之 CountDownLatch(计数等待/同步辅助类)

CountDownLatch 是Java中提供的一种同步工具类,用于控制多个线程之间的执行顺序和协调。CountDownLatch 通过一个计数器来实现,该计数器初始化为一个正整数,表示需要等待的线程数目。每个线程执行完一定的任务后,会调用方法将计数器减1。当计数器减到0时,表示所有线程已经完成任务,等待在await()方法处的线程被唤醒,继续执行后续操作。控制执行顺序:控制多个线程执行的顺序,让某个线程等待其他线程完成特定任务后再执行。

QIFU的专栏 2114

24. SAP UI5 应用如何使用 OData 数据模型

本教程之前的二十三个步骤,使用的数据模型都是 JSON 模型。从本步骤开始,我们要学习另一种非常重要的数据模型:OData 数据模型。 OData 数据模型也是 SAP 产品里广泛使用的数据模型,比如 SAP S/4HANA,SAP CRM Fiori 应用等等,都使用的是 OData 数据模型而不是 JSON 数据模型。 使用 OData 数据模型的典型场景就是,通过 OData 模型提供的 Read API,将远端服务器上存储的数据通过 OData 协议读取到客户端,并显示在 SAP UI5 应用里。.

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 5794

Java并发——CountDownLatch

`CountDownLatch`是Java并发中常用的一个工具类,通常称为锁存器latch,作用为同步一个或多个任务,强制等待指定任务执行完成,即多线程中控制一个或多个线程去等待其他线程完成操作。本文将详解介绍CountDownLatch的使用及底层原理。

雪月清的博客 1947

40、5G NR射频要求解析

本文详细解析了5G NR射频相关要求,包括参考灵敏度与动态范围的定义、接收机对干扰信号的抗扰性要求(如阻塞、邻道选择性等)、辐射射频要求在FR1和FR2频段的差异,以及多标准无线电基站(MSR)的发展及其对射频要求的影响。内容涵盖测试模型、干扰场景、具体指标和实现挑战,为理解和应用5G NR射频规范提供了全面指导。

qsc901234的博客 245

YOLOv11改进策略【注意力机制篇】| SE、CBAM、ECA、CA、Swin Transformer等注意力机制全面解析与应用

本文详细介绍了五种主流的注意力机制及其在YOLOv11中的应用。通过合理的模块选择和位置部署,注意力机制能够显著提升目标检测性能。

QQ_778132974的博客 873

CountDownLatch介绍和使用【Java多线程必备】

CountDownLatch介绍、特性、注意事项、使用案例(干货满满)

Mr.绵羊的知识星球 3万+

推荐系统中召回率Recall计算方式附代码

Recall(召回率)是指在所有实际有交互的用户 - 物品对中,推荐系统成功预测出的比例。具体来说,设所有有交互的用户 - 物品对为S,推荐系统预测出的用户 - 物品对为T,则Recall的计算公式为:

优快云 精品推荐 1842

java并发中CountDownLatch的使用

文章目录主线程等待子线程全都结束之后再开始运行等待所有线程都准备好再一起执行停止CountdownLatch的await java并发中CountDownLatch的使用 在java并发中,控制共享变量的访问非常重要,有时候我们也想控制并发线程的执行顺序,比如:等待所有线程都执行完毕之后再执行另外的线程,或者等所有线程都准备好了才开始所有线程的执行等。 这个时候我们就可以使用到CountDownL...

程序那些事 1万+

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

【Java并发】辅助类CountDownLatch、CyclicBarrier、Semaphore

本文总结了JUC常用三大辅助类CountDownLatch、CyclicBarrier、Semaphore的使用方法(含示例代码和方法解析)。

hrh的博客 3224

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

【Java 并发】CountDownLatch 介绍

的核心特点在于它是一种倒计数器, 初始值设定为某个正整数。在多线程任务中, 当一个线程完成了一定的操作, 可通过调用 countDown() 方法来使计数器减 1, 而其他线程可通过 await() 方法等待计数器变为零。一旦计数器变为零, 等待的线程将被唤醒继续执行。为了能够理解 CountDownLatch, 举一个很通俗的例子。运动员进行跑步比赛时, 假设有 6 名运动员参与比赛, 裁判员在终点会为这 6 名运动员分别计时, 可以想象每当一个运动员到达终点的时候,

LCN29的博客 1058

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

Java并发之CountDownLatch

Java并发之CountDownLatch 目录 Java并发之CountDownLatch 1、什么是CountDownLatch 2、CountDownLatch如何工作的 3、方法说明 4、实例:一个线程等待其他线程运算结果,其他线程不需要阻塞等待 6、源码分析: 7、CountDownLatch内部实现: 7.1 await内部实现流程: 7.2 countDown内部...

Eric的博客 498

[Java] CountDownLatch 模拟高并发

参考: Class CountDownLatch Coordinating threads with CountDownLatch一、简介CountDownLatch 是 java.util.concurrent 包下的一个同步辅助类,它能使一个或多个线程在其他的线程的一系列操作完成之前一直等待,初始化值为计数器大小(即线程数量)。二、使用场景 同时启动多个线程; 多个线程操作完成之前一直等待。

列苗 6893

Java并发编程三大神器之CountDownLatch

1、CountDownLatch是什么 2、官网应用demo 2.1、CountDownLatch 官网demo1 2.2、CountDownLatch 官网demo2 3、开发中的应用小栗子 3.1、栗子1:【多个线程等待】模拟并发,让并发线程一起执行 3.2、栗子2:【单个线程等待】多个线程(任务)完成后,进行汇总合并 4、CountDownLatch 实现原理 5、CountDownLatch 结语

michael_linux的博客,一个小小小学生。滴水穿石,步步为营,只为那刹那芳华。 1239

Java并发插件_Java并发之CountDownLatch的使用

Java并发之CountDownLatch的使用一. 简介Java的并发包早在JDK5这个版本中就已经推出,而且Java的并发编程是几乎每个Java程序员都无法绕开的屏障。笔者今晚在家闲来无事,翻看了以前的博客,发现好久都没有写过博客,就想着写点东西,写点什么好了,思来想去很久,决定在这段时间里写写关于Java并发相关的东西。由于是突然兴起,所有就没有什么规划,想到什么就写点什么吧,没想到首先想到...

weixin_32561885的博客 187

java并发之CountDownLatch

从例子中可以看到很关键的两个方法.CountDownLatch的countDown()方法和await()方法.而且java没有特殊情况的话,是串行执行,所以我们就从countDown()方法为入口.解除自己心中的疑惑.没看错,是主线程.因为java天生支持多线程,我们不能以一个一个线程的执行来分析,当我们执行线程一和二的逻辑的时候,主线程已经执行到await方法了.接下来我们就直接去看await方法来破案吧.找到的子类实现以后,两个很关键的地方,一个是for循环,一个是cas操作.

不愿言弃-念何的博客 995

java countdownlatch_java 并发——CountDownLatch

java 并发——CountDownLatch简介public class CountDownLatch {private final Sync sync;private static final class Sync extends AbstractQueuedSynchronizer {Sync(int count) {setState(count);}// ...}}允许一个或多个线程等待直...

weixin_36027600的博客 159

java 并发——CountDownLatch

java 并发——CountDownLatch 简介 public class CountDownLatch { private final Sync sync; private static final class Sync extends AbstractQueuedSynchronizer { Sync(int count) { ...

qq_16830879的博客 249

java并发初探CountDownLatch

java并发初探CountDownLatch CountDownLatch是同步工具类能够允许一个或者多个线程等待直到其他线程完成操作。 当前前程A调用CountDownLatch的await方法进入阻塞(LockSupportd的park方法), 其他线程调用CountDownLatch调用countDown(),CountDownLatch的内部变量 count为零时,线程A唤醒。 ...

weixin_30363509的博客 70

java并发编程之CountDownLatch

CountDownLatch是一个同步辅助工具,允许一个或多个线程等待,直到在其他线程中执行的一组操作完成。CountDownLatch概念是很常见的面试问题,在Java并发,所以一定要充分理解它。在这篇文章中,我将介绍与java并发中的CountDownLatch相关的以下几点。 这篇文章中的章节: 什么是CountDownLatch? CountDownLatch如何工作? 实时应用中可...

javaZhong的博客 2206
上一篇: java并发-CyclicBarrier
下一篇: java并发-Semaphore
曲终--人散
博客等级 码龄14年 23粉丝 51原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值