CountDownLatch 门闩 实例详解

SAP成本中心费用分割(KSS2)实战:从原理到月末调整全解析 本文详细解析了SAP成本中心费用分割(KSS2)的核心逻辑与实战操作,从成本要素分组配置到月末调整全流程。通过KSS2将初级成本要素按作业类型重新分类为次级成本要素,确保成本结算准确。文章还提供了常见错误处理方法和典型业务场景实战,帮助用户高效完成SAP成本结算。 阅读详情

CountDownLatch 介绍

CountDownLatch是JAVA提供在java.util.concurrent包下的一个辅助类,可以把它看成是一个计数器,其内部维护着一个count计数,只不过对这个计数器的操作都是原子操作,同时只能有一个线程去操作这个计数器。如果调用对象上的await()方法,调用者就会一直阻塞,直到别人调用countDown方法,将计数减到0,才可以继续执行。

CountDownLatch可以避免等待队列,它可以让代码执行效率更高一些。

代码实例:

final CountDownLatch latch = new CountDownLatch(1); //定义一个门闩(计数器),一旦定义,不可变。

门闩常用方法:

latch.await();                        等待门闩的开放,不是进入等待队列。

latch.countDown();               调用此方法,门闩减一

以一个案例讲解CountDownLatch门闩

要求:定义一个容器,该容器最大限度为10,当容器元素添加到第5个的时候,打印容器大小。

代码:

/**
 * CountDownLatch 门闩
 */
package concurrent.t02;

import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.CyclicBarrier;
import java.util.concurrent.Semaphore;
import java.util.concurrent.TimeUnit;

public class Test_03 {
	public static void main(String[] args) {
		final Test_03_Container t = new Test_03_Container();
		final CountDownLatch latch = new CountDownLatch(1);

		new Thread(new Runnable(){
			@Override
			public void run() {
				if(t.size() != 5){
					try {
						latch.await(); // 等待门闩的开放。 不是进入等待队列
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
				}
				System.out.println("size = 5");
			}
		}).start();
		
		new Thread(new Runnable() {
			@Override
			public void run() {
				for(int i = 0; i < 10; i++){
					System.out.println("add Object to Container " + i);
					t.add(new Object());
					if(t.size() == 5){
						latch.countDown(); // 门闩-1
					}
					try {
						TimeUnit.SECONDS.sleep(1);
					} catch (Exception e) {
						e.printStackTrace();
					}
				}
			}
		}).start();
	}
}

class Test_03_Container{
	List<Object> container = new ArrayList<>();
	
	public void add(Object o){
		this.container.add(o);
	}
	
	public int size(){
		return this.container.size();
	}
}

门闩应用场景:马拉松比赛

栅格数据空间叠置分析题目步骤讲解 题目: 准备工作: ①新建数据库,将实验数据导入(利于后期矢量转栅格操作,未建数据库此步骤会一直出错); ②在工具条自定义窗口勾选spacial analyst模块,在菜单栏→扩展模块,勾选spacial analyst;确保实验后面的操作可以成功。 详细操作步骤: 1.对三个方案的规划路线(line.shp)建立50m缓冲区;打开ArcMap,在ArcToolBox→分析工具→邻域分析→缓冲区,打开缓冲区工具窗口,界面设置如图:线性单位填写50米,其余默认,单击“确定”。 ... 阅读详情

相关推荐

避坑指南:PyCINRAD处理CINRAD雷达数据时遇到的5个典型报错及解决方案

本文针对使用PyCINRAD库处理CINRAD雷达基数据时常见的5个典型报错,提供了详细的解决方案。内容涵盖环境配置、数据读取、PPI可视化及性能优化等核心环节,重点解决了版本兼容性、数据异常处理和中文乱码等实际问题,帮助用户高效处理雷达基数据并生成准确的PPI图像。

cc789的博客 1068

CountDownLatch认识和使用

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

qq_39403359的博客 298

U-net复现pytorch版本 以及制作自己的数据集并训练

GitHub链接: https://github.com/milesial/Pytorch-UNet 论文链接:

candice5566的博客 3万+

CountDownLatch源码解析和使用示例

CountDownLatch同步辅助工具源码解析、使用案例的展示。以及CountDownLatch中使用了AQS(AbstractQueuedSynchronizer),以及使用中的一些细节和happens-before的问题描述

于琦海 356

从桨叶设计到电机匹配:手把手教你调出无人机最佳动力组合

本文系统介绍了无人机动力系统的核心匹配原则,重点解析了如何通过测试与数据分析,优化螺旋桨与电机的组合,从而显著提升系统力效与续航。文章提供了从参数解读、实战测试到深度调优的完整指南,帮助开发者解决电机过热、推力不足等常见问题,实现无人机性能最大化。

weixin_29305313的博客 242

高通量测序数据分析:RNA-seq

深度测序相关数据库与数据格式 SRA toolkit 一、NCBI 和EBI、DDBJ组成INSDC,数据内容相同所以找NCBI就行。 (一)NCBI常用数据库 GenBank:遗传序列数据库,收集了所有公开的DNA序列及其注释 GEO (Gene Expression Omnibus) :收集整理各种表达芯片数据,后来加入了甲基化、lncRNA、miRNA、CNV等其他芯片,还有高通量测序数据...

qq_41134363的博客 3万+

CountDownLatch countDownLatch = new CountDownLatch(1)解释

是 Java 中一个同步工具类,通常用于协调多个线程的执行。这行代码的意思是创建一个对象,并初始化计数器为 1。的作用是使一个或多个线程等待,直到其他线程完成某些操作后才能继续执行。

qq_56947957的博客 513

最优控制 (Optimal Control) 算法详解及案例分析

最优控制是一种通过优化控制输入,使系统在满足约束条件的情况下达到最优性能的控制方法。其目标是最小化或最大化一个性能指标。

闲人编程的博客 2092

java多线程之CountDownLatch(1)(模拟高并发和开会问题)

一、简介 CountDownLatch 是 java.util.concurrent 包下的一个同步辅助类,它能使一个或多个线程在其他的线程的一系列操作完成之前一直等待,初始化值为计数器大小(即线程数量)。 二、使用场景 同时启动多个线程; 多个线程操作完成之前一直等待。 注:此处“同时”只能是“大约同时”,涉及到每个线程是否可以分配到一个自由的处理器,系统是否繁忙,线程释放CPU的速度,...

攻城狮Luke 1257

Python爬虫实战:使用Scrapy+Playwright高效爬取全球石油价格历史数据

python复制下载# 产品信息# 日期信息# 价格数据price = scrapy.Field() # 收盘价open = scrapy.Field() # 开盘价high = scrapy.Field() # 最高价low = scrapy.Field() # 最低价volume = scrapy.Field() # 交易量change_percent = scrapy.Field() # 涨跌幅# 元数据。

2201_76125261的博客 1020

MIKE21 教程 3.2 随空间变化的网格文件制作(.dfsu文件制作) 曼宁值网格文件制作

上一节讲解了如何制作时间序列文件。本节讲解如何制作仅随空间变化的文件。 目录 1 数据准备 1.1 基于地形设置 1.2 基于地形水深设置: 2 数据导入 3 数据导出

Hello Word 3941

CountDownLatch实现原理及使用

1.CountDownLatch工作原理 CountDownLatch在多线程并发编程中充当一个计时器的功能,并且维护一个count的变量,并且其操作都是原子操作,该类主要通过countDown()和await()两个方法实现功能的,首先通过建立CountDownLatch对象,并且传入参数即为count初始值。如果一个线程调用了await()方法,那么这个线程便进入阻塞状态,并进入阻塞队列。如果一个线程调用了countDown()方法,则会使count-1;当count的值为0时,这时候...

Venus 的博客 3374

Vue - 在纯 HTML 普通项目中实现组件化,让原生 html 项目支持引入 *.vue 组件 / 组件与组件间的互相引用等,完美解决了引入组件出现的跨域问题(保姆级详细教程,完整示例源码及插件)

html中使用vue组件,在HTML页面中引入vue组件,HTML界面利用http-vue-loader.js以组件方式引入vue文件,使用http-vue-loader引入组件出现报错,在html页面使用http-vue-loader插件引入组件报跨域错误,如何解决http-vue-loader引用组件时出现跨域问题,纯html原生web项目引入vue后如何实现组件引入,使用http-vue-loader插件控制台报错跨域,http-vue-loader跨域怎么办官方文档,html页面如何引入.vu

🏆 前端领域优质创作者 3908

CountDownLatch 门闩

CountDownLatch 的使用方式

快乐的小三菊的博客 605

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

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

CountDownLatch 计数器门闩

我只能说中华文化博大精深,最开始的时候还是不认识闩字的,百度了一下, 闩[shuān]。 从型上分析,就是门上插把棍子,锁住什么东西。CountDownLatch 就是把线程关起来,不许出来,得先干完活。CountDownLatch 计数器门闩/** * CountDownLatch 计数器门闩 * 该任务是如果完成了5个任务,那么才去执行发工资的事情 * * @author be

811 299

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Go语言 和 Java语言对比理解系列四:门闩(WaitGroup/CountDownLatch)

如果内部计数器变为0,Wait方法阻塞等待的所有线程都会释放,如果计数器小于0,方法panic。注意Add加上正数的调用应在Wait之前,否则Wait可能只会等待很少的线程。一般来说本方法应在创建新的线程或者其他应等待的事件之前调用。父线程调用Add方法来设定应等待的线程的数量。为了和Java的门闩形成对比,这里用Go的WaitGroup实现“使用三个线程,按顺序打印X,Y,Z,连续打印10次”的功能。【Done】方法减少WaitGroup计数器的值,应在线程的最后执行。

徐小陌的博客 653

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

倒计时门闩(CountDownLatch)是一种同步工具,允许一个或多个线程等待,直到门闩的计数器达到零

然而,需要注意的是,如果多个线程同时尝试调用countDown()方法,可能会导致计数器过快地递减,从而提前打开门闩。使用倒计时门闩的一个典型例子是,当一个线程需要等待其他多个线程完成各自的任务后才能继续执行。在这种情况下,主线程可以调用倒计时门闩的await()方法来等待其他线程完成任务,而其他线程在完成任务后可以调用countDown()方法来递减计数器。一旦计数器达到零,主线程将继续执行。倒计时门闩(CountDownLatch)是一种同步工具,允许一个或多个线程等待,直到门闩的计数器达到零。

[Blog][Domain] programb.blog.youkuaiyun.com 1300

CountdownLatch(门闩)

当然我们也可以实现自己的计数器/*** 自定义 CountDown 计数器*///计数器//锁住 ++ 通知其他线程= count) {//不等于 则 继续等待测试System.out.println(" 准备多线程处理任务 ");try {System.out.println(" 线程开始 ----- " + Thread.currentThread().getName());

tumu6889的博客 527

CountDownLatch类 多线程之倒计时门闩

倒计时门闩就像一个带计数开关的门,只有在门前等待的线程数量达到一定的数量时,门闩才会打开,线程才可以继续执行。 实现类: CountDownLatch,该类从Object继承而来,可以通过一个给定的值进行初始化,通常在同步状态中保存的是当前的计数值,线程的调用await()方法等待,方法countDown()会导致计数值递减,当计数值为零时,所有在倒计时门闩范围内等 ...

夜冬的博客 418

CountDownLatch - 关于门闩的一个面试题

原文链接:https://blog.youkuaiyun.com/qq_38238041/article/details/83789917,我自己又改了下,在于线程2的if判断没有必要。 面试题:实现一个容器,提供两个方法,一个size,一个add 写两个线程,线程1往自定义容器中添加十个元素,线程2实时监控容器中的数量, 在容器中元素个数为5的时候输出并结束线程。 ...

不积跬步无以至千里,不积小流无以成江河 386

递减计数门闩CountDownLatch

CountDownLatch允许一个或多个线程等待其他线程完成操作。 相当于是一个门栓,一开始是关闭的,所有希望通过该门的线程都需要等待,等待计数器变为0后,门栓打开,等待的所有线程都可以通过,它是一次性的,打开后就不能再关上了。 CountDownLatch里有一个计数,这个计数通过构造方法进行传递: public CountDownLatch(int count) 多个线程可以基于这个...

xc_oo0的博客 47

深入理解CountDownLatch:多线程协作的倒计数门闩

在Java并发编程中,多线程协作与等待是核心难题。开发者常需让主线程等待所有子任务完成后再统一收口,传统的Thread.join和轮询方式不仅代码冗长,还易引发并发Bug。CountDownLatch作为基于AQS的同步工具,通过倒计数门闩机制,以轻量级CAS操作实现高效的线程等待与唤醒。它支持一个或多个线程等待一组事件完成,广泛应用于批量数据处理、多接口聚合、并发压测信号发射等场景。本文从AQS源码原理到实战案例,详解CountDownLatch的核心API、超时处理、故障排查及与CyclicBarrie

weixin_31364787的博客 309

CountDownLatch:Java并发编程的“倒计时门闩(shuan)”

所有运动员准备好后(countDown),裁判才发令(await结束):所有人到齐后(countDown),大巴车才出发(await结束):凑够人数(countDown),才能成团发货(await结束)

很搞笑的在打麻将的博客 259

CountDownLatch倒计数锁存器(Latch:门闩[shuan])

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

岁月静好 1269

学习muduo库(4)之门闩类CountDownLatch

UML: 解释: CountDownLatch类是一个通过条件变量类condition,来实现让多个子线程同时起跑的。其实count_是表示需要建立的线程数,当count_大于零时,线程会被条件变量挂起。每建立一个线程count_都会减一,当最后一个线程建立成功后,count_减为零。这个时候就唤起所有被条件变量挂起的线程。这些线程同时起跑。关键的代码如下: void CountD...

请叫我少爷的博客 364

java多线程 门闩_详解Java多线程编程中CountDownLatch阻塞线程的方法

直译过来就是倒计数(CountDown)门闩(Latch)。倒计数不用说,门闩的意思顾名思义就是阻止前进。在这里就是指 CountDownLatch.await() 方法在倒计数为0之前会阻塞当前线程。CountDownLatch是一个同步辅助类,在完成一组正在其他线程中执行的操作之前,它允许一个或多个线程一直等待。CountDownLatch 的作用和 Thread.join() 方法类似,可用...

weixin_33634121的博客 388
上一篇: 多线程,生产者消费者模式经典讲解,简单易懂2
下一篇: ThreadLocal 多线程环境使用详解
疯狗挨踢
博客等级 码龄11年 24粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值