Java多线程中的CountDownLatch

java多线程——CountDownLatch 是 Java 并发工具包 () 中提供的一个同步辅助类,用于协调多个线程之间的执行顺序。它允许一个或多个线程等待直到在其他线程中执行的一组操作完成。 阅读详情
java.util.concurrent 包中的类CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。用给定的计数 初始化 CountDownLatch。由于调用了 countDown() 方法,所以在当前计数到达零之前,await 方法会一直受阻塞。之后,会释放所有等待的线程,await 的所有后续调用都将立即返回。这种现象只出现一次——计数无法被重置。如果需要重置计数,请考虑使用 CyclicBarrier。 


CountDownLatch 是一个通用同步工具,它有很多用途。将计数 1 初始化的 CountDownLatch 用作一个简单的开/关锁存器,或入口:在通过调用 countDown() 的线程打开入口前,所有调用 await 的线程都一直在入口处等待。用 N 初始化的 CountDownLatch 可以使一个线程在 N 个线程完成某项操作之前一直等待,或者使其在某项操作完成 N 次之前一直等待。 


CountDownLatch 的一个有用特性是,它不要求调用 countDown 方法的线程等到计数到达零时才继续,而在所有线程都能通过之前,它只是阻止任何线程继续通过一个 await。 


CountDownLatch的构造方法public CountDownLatch(int count)构造一个用给定计数初始化的 CountDownLatch。

参数count - 在线程能通过 await() 之前,必须调用 countDown() 的次数 。


主要方法有:

public void await()throws InterruptedException使当前线程在锁存器倒计数至零之前一直等待,除非线程被中断。 如果当前计数为零,则此方法立即返回。 

public void countDown()递减锁存器的计数,如果计数到达零,则释放所有等待的线程。 
如果当前计数大于零,则将计数减少。如果新的计数为零,出于线程调度目的,将重新启用所有的等待线程。 
如果当前计数等于零,则不发生任何操作。 


例如运动会需要等待运动员到齐后才开始比赛,这个场景可以用上CountDownLatch。

public class CountDownLatch_1 implements Runnable{
	/*设置计数为10*/
	static CountDownLatch  c = new CountDownLatch(10);
	static int number=1;
	/*调用lock是对数据进行同步*/
	
	Lock lock = new ReentrantLock();
	
	@Override
	public void run() {
			try {
				lock.lock();
				Thread.sleep(100);
				System.out.println(number+"号"+"运动员"+"到达");
				number+=1;
				/*计数减一*/
				c.countDown();
			
			} catch (Exception e) {
				// TODO: handle exception
				
			} finally {
					lock.unlock();
			}
		
	}

	public static void main(String[] args) throws InterruptedException {
			CountDownLatch_1 countDownLatch_1 = new CountDownLatch_1();
			/*创建容量为10的线程池*/
			ExecutorService executorService = Executors.newFixedThreadPool(10);
			for(int i=0;i<10;i++) {
				
				executorService.submit(countDownLatch_1);
				
			}
			/*在计数没有减到0,是不会执行方法await后面的代码*/
			c.await();
			System.out.println("所有运动员到场,比赛开始");
			executorService.shutdown();
	}

}



【JAVA多线程21】CountDownLatch 前序: 上周测试给开发的同事所开发的模块提出了一个bug,并且还是偶现。 经过仔细查看代码,发现是在业务中启用了多线程,2个线程同时跑,但是新启动的2个线程必须保证一个完成之后另一个再继续运行,才能消除bug。 什么时候用? 多线程是在很多地方都会用到的,但是我们如果想要实现在某个特定的线程运行完之后,再启动另外一个线程呢,这个时候CountDownLatch就可以派上用场了 怎么用? ... 阅读详情

相关推荐

【Java 多线程 6】countdownlatch用法

一、CountDownLatch简介 CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,或者说起到线程之间的通信(而不是用作互斥的作用)。 CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。使用一个计数器进行实现。计数器初始值为线程的数量。当每一个线程完成自己任务后,计数器的值就会减一。当计数器的值为0时,表示所有的线程都已经完成一些任务,然后在CountDownLatch上等待的线程就可以恢复执行接下来的任务。 二、CountDownL

学Java,找哪吒 6898

CountDownLatch详解

概述 CountDownLatch概念 CountDownLatch是一个同步工具类,用来协调多个线程之间的同步,用来作为线程间的通信而不是互斥作用。 CountDownLatch能够使一个线程在等待另外一些线程完成各自工作之后,再继续执行。 使用一个计数器进行实现,计数器初始值就是线程的数量。 当每个被计数的线程完成任务后,计数器值减一,当计数器的值为0时,表示所有线程都已经完成了任务,然后在CountDownLatch上等待的线程就可以恢复执行。 CountDownLatch的用法 ...

抽象的螺旋 2万+

SOLIDWORKS无法获得下列许可 无效的使用许可号码(-8,544,0) 解决办法大全

SOLIDWORKS无法获得下列许可 无效的使用许可号码(-8,544,0) 解决办法大全。版本:SolidWorks2021。电脑:惠普战66四代。软件安装不困难!

qq_43596278的博客 11万+

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

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

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

Innovus ECO修复时序违例:ecoAddRepeater插Buffer原理与实战

芯片物理设计越到后期,时序收敛越依赖局部修正而非全局重跑。ECO(Engineering Change Order)作为数字后端高频操作,能在不破坏既有布局布线结果的前提下,精准修复DRV违例、hold时序问题或实现功能补丁。其中,插入Buffer或Inverter是拆解长线RC负载、改善max_transition/max_capacitance最直接的手段。Innovus提供的ecoAddRepeater命令封装了单元选择、坐标摆放和网表重连等底层细节,配合ecoRoute可快速完成绕线。合理选型Buf

weixin_31858171的博客 301

二阶高通滤波器硬件设计:5种RC到有源方案对比与选型

在传感器前端和音频信号调理中,二阶高通滤波器是抑制直流偏移与低频干扰的关键模块。其设计核心围绕截止频率、品质因数Q、增益与噪声四个指标展开,其中Q值决定滤波器在转折频率附近的响应形状,如Butterworth最大平坦响应需Q=0.707。从纯无源RC电路到引入运放的有源拓扑,演变逻辑在于解决负载效应、提供增益并借助反馈提升Q值。实际工程中,RC级联、VCVS(Sallen-Key)、状态变量及回转器模拟电感等方案各有适用场景:RC电路简单但Q值受限,Sallen-Key单运放即可实现高Q,状态变量适合Q值独

weixin_32770423的博客 105

CountDownLatch详解以及用法示例

一、什么是countDownlatch CountDownLatch是一个同步工具类,它通过一个计数器来实现的,初始值为线程的数量。每当一个线程完成了自己的任务,计数器的值就相应得减1。当计数器到达0时,表示所有的线程都已执行完毕,然后在等待的线程就可以恢复执行任务。 二、方法详解 CountDownLatch(int count):count为计数器的初始值(一般需要多少个线程执行,count就设为几)。 countDown(): 每调用一次计数器值-1,直到count被减为0,代表所有线程全部执行完毕

liu_da_da的博客 4万+

GEE去云处理代码段解读(位运算)

GEE去云处理代码段解读,包含位运算符号解读、bitwiseAnd()函数、eq()函数解读

jiekeheiguanglan的博客 2069

Java并发之CountDownLatch的基本使用

利用CountDownLatch进行线程间同步,可以控制其线程的执行时序,谁先执行、谁后执行,利用好CountDownLatch即可1、CountDownLatch类的内部维护一个初始值,该值称为计数器,主线程执行await()方法时,如果计数器值大于0时,主线程将会被阻塞,当另外的线程完成任务后,调用CountDownLatch对象的coutDown()方法时,计数器值就会减12、当这个计数器值等于0时,处于阻塞等待的线程将会被唤醒,则可以继续执行程序了!

王员外的博客 6693

通用定时器脉冲计数实验(STM32CubeMx配置)

通用定时器脉冲计数实验

a1169511636的博客 5510

Li‘s 核磁共振影像数据处理-4-使用3D Slicer从DTI计算参数图(FA、ADC等)

从DTI计算参数图 通过3D Slicer软件计算 主要步骤 导入DICOM影像 3D Slicer似乎只能支持DICOM格式和NRRD格式的DTI处理,而无法支持NIFTI+磁场梯度信息文件的方式。(这里不确定,如有错误请指正。) 模块选择: 需要选择或设置的内容包括:选择DicomToNrrd,设置Output DWI Volume file,设置Input Dicom Data Directory。设置好后点击“Apply”。 制作mask。 实质就是去脑壳。 模块选择: 需要设置的内

weixin_38594676的博客 3921

Java多线程实战-CountDownLatch模拟压测实现

当多个线程需要协调和同步执行任务时,Java 中的 CountDownLatch(倒计时器)是一个常用的工具类。它可以帮助开发者实现线程之间的同步,确保某些线程在其他线程完成任务后再继续执行。牵着猫散步的鼠鼠。本文将介绍 CountDownLatch 的基本原理、用法以及示例代码,最后会使用CountDownLatch完成一个简单的压测实现。

qq_35716689的博客 25万+

[Ethernet in CANoe]4--CANoe工程中SOME/IP报文的详细介绍(二)

介绍了SOME/IP报文的SD报文(ServiceDiscovery),本片文章开始继续介绍SOME/IP报文。

汽车ECU自动化测试 1116

java多线程countdownlatch_JAVA多线程CountDownLatch使用详解

前序:上周测试给开发的同事所开发的模块提出了一个bug,并且还是偶现。经过仔细查看代码,发现是在业务中启用了多线程,2个线程同时跑,但http://www.cppcns.com是新启动的2个线程必须保证一个完成之后另一个再继续运行,才能消除bug。什么时候用?多线程是在很多地方都会用到的,但是我们如果想要实现在某个特定的线程运行完之后,再启动另外一个线程呢,这个时候CountDownLatch就可...

weixin_39812046的博客 170

Java对接(BSC)币安链 | BNB与BEP20的开发实践(三)水龙头 WEB3

这一节我们讲一个币安测试链如何获取到BNB、USDT等BEP20数字货币(水龙头)来让我们前期测试开发。如图:我们将创建的地址填入相应输入框,来获取到测试BNB以及其他BEP20数字币。发币可能需要交易等待,请耐心等待即可,交易完成后,币会到达您的地址内。上一节我们用代码来实现BNB转账、BEP20转账、链上交易监控。2.MetaMask(小狐狸)浏览器插件 🪜。使用EDGE浏览器可以在浏览器直接打开。使用Chrome浏览器,请使用🪜打开。基本工作就绪后,即可进行开发测试。3. 测试区块链浏览器 🪜。

大猩猩的专栏 2790

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Java多线程场景下 CountDownLatch、CyclicBarrier

在Java多线程编程中,CountDownLatch、Semaphore和CyclicBarrier是关键的同步工具,各自具有独特的功能和应用场景。CountDownLatch允许一个或多个线程等待其他线程完成特定操作,通过递减计数器实现线程的精准等待。CyclicBarrier则为一组线程提供一个同步点,使它们相互等待,直到所有线程都到达屏障点后继续执行。通过运动场比赛的代码示例,展示了CyclicBarrier用于同步运动员起跑,CountDownLatch用于统计比赛结束的场景。

技术人宝哥 1256

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

java多线程——闭锁CountDownLatch

java多线程——闭锁CountDownLatch

weixin_59796310的博客 506

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Java多线程之CountDownLatch用法

Java多线程之CountDownLatch用法 本文目录: CountDownLatch基本概念 CountDownLatch案例:6个同学陆续离开教室后班长才可以关门 CountDownLatch案例:秦灭6国,一统华夏 1. CountDownLatch基本概念 1. 让一些线程阻塞直到另一些线程完成一系列操作后才被唤醒。 2. CountDownLatch主要有两个方法,当一个或多...

努力努力再努力L 289

Java多线程之CountDownLatch

CountDownLatch犹如倒计时计数器,调用CountDownLatch对象的countDown方法就将计数器减1,当计数器为0时,则所有等待者或单个等待者开始执行。 package com.javase.thread; import java.util.Random; import java.util.concurrent.CountDownLatch; import java.uti

Alex_zhuang的专栏 1598

Java多线程1:CountDownLatch计数器

前言:多个线程同时查询一张表,最后汇总查询结果返回,那么就存在一个问题,如何判断多个线程是否全部已经处理完成。 一、CountDownLatch简介 1、CountDownLatch概念 CountDownLatch是多线程控制的一种工具,它被称为门阀、计数器或者闭锁。这个工具经常用来用来协调多个线程之间的同步,使一个线程等待其他线程各自执行完毕后再执行。 CountDownLatch是在Java1.5被引入,存在于java.util.cucurrent包下。跟它一起被引入的工具类还有Cy...

何哥的博客 2111

Java中count类型,Java中多线程同步类 CountDownLatch

在多线程开发中,常常遇到希望一组线程完成之后在执行之后的操作,java提供了一个多线程同步辅助类,可以完成此类需求:类中常见的方法:其中构造方法:CountDownLatch(int count) 参数count是计数器,一般用要执行线程的数量来赋值。long getCount():获得当前计数器的值。void countDown():当计数器的值大于零时,调用方法,计数器的数值减少1,当计数器等...

weixin_28904055的博客 609

java多线程之CountDownLatch

1  java多线程中有一个同步计数器:CountDownLatch。可用于多线程的一个同步的计数器。主要的用法函数:构造函数、countDown()、await()。同步计数器的作用:当在主线程中需要等待别的多个子线程完成之后当前主线程才能继续往下执行时,不然一直等待多个子线程执行完毕。这时就可以使用同步计数器(CountDownLatch)。 2 CountDownLatch

xclsky的博客 206

JAVA多线程之CountDownLatch和CyclicBarrier

1 CountDownLatch (1)countDownLatch等待指定数量线程结束后,进行下一步; (2)countDownLatch构造函数初始化一个volatile变量,countDown()方法,使用了CAS,和AutomicInteger的增减方法相同; (3)await方法阻塞当前线程,直到getCount值为0,如果不调用countDown方法,getCount的值部位0,那...

weixin_39722651的博客 210

Java并发多线程编程——CountDownLatch

目录一、CountDownLatch概述二、CountDownLatch代码示例(模拟员工下班关门案例)三、CountDownLatch代码示例(使用枚举方式模拟员工下班关门案例) 一、CountDownLatch概述 让一些线程阻塞直到另外一些完成后才被唤醒。 CountDownLatch主要有两个方法: (1)、当一个或多个线程调用await方法时,调用线程会被阻塞. (2)、 其他线程调用countDown方法计数器减1(调用countDown方法时线程不会阻塞),当计数器的值变为0,因调用awai

小志的博客 2742

countdownlatch java_JAVA多线程CountDownLatch使用详解

前序:上周测试给开发的同事所开发的模块提出了一个bug,并且还是偶现。经过仔细查看代码,发现是在业务中启用了多线程,2个线程同时跑,但是新启动的2个线程必须保证一个完成之后另一个再继续运行,才能消除bug。什么时候用?多线程是在很多地方都会用到的,但是我们如果想要实现在某个特定的线程运行完之后,再启动另外一个线程呢,这个时候CountDownLatch就可以派上用场了怎么用?先看看普通的多线程代码...

weixin_32307599的博客 430
上一篇: Java线程池的简单应用
下一篇: Java多线程中的CyclicBarrier
Coder_py
博客等级 码龄10年 106粉丝 258原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值