Thinking in Java学习笔记 CountDownLatch(CountDownLatchDemo.java)

python123题目——个税计算器 类型:简单分支。 阅读详情

CountDownLatchDemo.java

每个任务线程完成一部分工作,完成后通过CountDownLatch来通知总线程,

总线程通过CountDownLatch.await()等待所有子线程完成操作后,再结束

package com.test.concurrent;

import java.util.Random;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;

public class CountDownLatchDemo {
	static final int SIZE=100;
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		ExecutorService exec=Executors.newCachedThreadPool();
		CountDownLatch latch=new CountDownLatch(SIZE);
		for(int i=0;i<10;i++){
			exec.execute(new WaitingTask(latch));
		}
		for(int i=0;i<SIZE;i++){
			exec.execute(new TaskPortion(latch));
		}
		System.out.println("Launched all tasks");
		exec.shutdown();
		
	}

}

class TaskPortion implements Runnable{
	private static int counter=0;
	private final int id=counter++;
	private static Random rand=new Random(47);
	private final CountDownLatch latch;
	TaskPortion(CountDownLatch latch){
		this.latch=latch;
	}
	public void dowork() throws InterruptedException{
		TimeUnit.MILLISECONDS.sleep(rand.nextInt(2000));
		System.out.println(this+" is completed!");
	}
	@Override
	public void run() {
		// TODO Auto-generated method stub
		try {
			dowork();
			latch.countDown();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public String toString(){
		return "Task Portion id:"+id;
	}
	
}
class WaitingTask implements Runnable{
	private static int counter=0;
	private final int id=counter++;
	private final CountDownLatch latch;
	WaitingTask(CountDownLatch latch){
		this.latch=latch;
	}
	public String toString(){
		return "Waiting Task id:"+id;
	}
	@Override
	public void run(){
		try {
			latch.await();
			System.out.println("Latch barrier passed for "+this);
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}


031、速度前馈与加速度前馈 摘要: 本文通过追剪机调试案例,阐述了速度前馈和加速度前馈在运动控制中的关键作用。前馈不是高级技巧,而是解决动态响应问题的必要手段:速度前馈通过预测速度变化提前补偿,加速度前馈则针对惯量变化提供力矩补偿。实现时需注意信号平滑处理,避免噪声放大。前馈与PID分工明确,前馈承担主要动态响应,PID处理残余误差。调试应先调前馈再微调PID,前馈增益需计算而非仅凭参数调整,并允许适当残余误差。前馈作为开环补偿不会影响系统稳定性,但需配合平滑的指令生成器使用。(149字) 阅读详情

相关推荐

国密SSL实战:手把手教你用Wireshark抓包分析GMTLS协议(附证书链验证技巧)

本文提供了一份国密SSL(GMTLS)协议的实战抓包分析指南。通过详细讲解Wireshark的配置、GMTLS握手流程的捕获与筛选,以及双证书机制和证书链的深度解析,帮助工程师和开发人员掌握使用Wireshark排查国密SSL连接问题、进行密评和协议调试的核心技巧。

rgv234567的博客 502

CountDownLatch模拟多线程使用Redisson实现秒杀扣减库存

可以看到执行了1000次还显示库存是96呢,因为多个线程去查redis的时候可能都是100,然后都执行100-1,他同时变成99,导致数据错误;用的是springbootTest进行模拟的普通秒杀扣减库存,从redis扣减库存。需要配置redisson客户端和引入redisson依赖才能用哦!非常优雅的执行完毕把库存扣减为0。

cxhcx的博客 338

OTP语音芯片SOP8的前世今生_如九齐_硕呈_钰绅等以及国产方案KT148A

语音芯片ic的其中一个品类,就是SOP8封装的OTP语音芯片,非常的经典和常用。源头的供应商基本都是台系的原厂,比如:九齐、硕呈、佑华等等,其中佑华就算是鼻祖了,早期的4位机也是在语音市场得到了升华。 OTP(One Time Programmable)是单片机的一种存储器类型,意思是一次性可编程:程序烧入单片机后,将不可再次更改和清除。

qyvhome的博客 1873

精通多线程实战-CountDownLatch

万丈高楼平地起,要精通也要一步步开始。先来学习concurrent包下的CountDownLatch这个类。 1.为什么先学这个类? 答:实用。我觉得这个类在实际的项目中是很有用的。 下面提出几个实际开发中经常遇到的问题,当然这些问题的解决方案是很多的,这里主要还是为了讲解CountDownLatch类的使用。可能存在更好的解决方案,但这里只提供CountDownLatch这种解决方案。 ...

ScottePerk的博客 389

实战派指南:反激电源EMI滤波器设计,从理论计算到PCB布局避坑

本文详细解析了反激式开关电源EMI滤波器设计的全流程,从理论计算到PCB布局避坑,结合34W PD快充电源案例,系统介绍了共模与差模干扰的识别、关键元件选型、参数计算优化及PCB布局技巧,帮助工程师有效解决传导测试超标等常见问题。

weixin_29230805的博客 373

动力学约束下的运动规划算法——状态栅格规划器(State Lattice Planner)

A*、RRT等算法建立的用于路径搜索的图模型是不考虑机器人的动力学约束的,其构建的图模型的两个相邻节点之间的路径可能是不可行的,或者很难被机器人跟踪的,现在我们想要使得图中相邻两个节点间的连接是一种满足动力学约束的可行的连接,那么如何构建一个这样的图呢? 构建这样的图通常有两种方法:第一种是基于控制空间的采样(正向方法)

慕羽★的博客 3104

多线程CountDownLatch使用demo

进行多线程其实不麻烦,麻烦的是对事务的控制处理,比如全滚或者部分回滚 1.CountDownLatch原理就是分配多条线程,主线程进行阻塞,待全部线程完成,主线程才执行 主要用到的方法就是创建对象的时候我们穿入的是线程数,然后每条线程执行完的时候执行 countDown() 进行计数,代表已完成线程+1 await() 则代表主线程阻塞,等待所有线程完成开往下执行 以下是部分回滚的demo 1.事务开启手动事务,根据业务具体回滚 //开启多线程 List<String> id

波波的博客 452

基于YOLO26深度学习框架的人脸识别门禁系统的算法研究实现方法

本文研究了基于YOLO26深度学习框架的人脸识别门禁系统实现方法。系统采用YOLO26目标检测算法,通过CSPDarknet53主干网络、特征金字塔结构和注意力机制实现高效人脸检测。研究内容包括数据预处理、模型训练优化和身份验证等关键技术,使用迁移学习策略和CIoU损失函数提升检测精度。该系统可应用于智能安防场景,具有实时性强、识别准确的特点,为门禁管理提供了智能化解决方案。

一键难忘的博客 766

CountdownLatch 使用两个demo

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

zhangbo0733的博客 404

传导案例:某医疗仪器传导骚扰整改案例

紫外线光疗仪是一种专业的医疗设备,主要用于治疗银屑病、白癜风等皮肤疾病。该设备采用物理治疗技术,通过特定波长的紫外线照射人体来达到治疗效果。自1984年窄谱中波紫外线(NB-UVB)应用于临床以来,该技术已成为治疗早期蕈样肉芽肿(MF)的有效方法之一。作为二类医疗器械,紫外线光疗仪必须符合严格的电磁兼容性(EMC)标准,这不仅关系到设备自身的稳定运行,更关乎患者的使用安全和治疗效果。紫外线光疗仪传导骚扰整改案例充分展示了系统性EMC设计的重要性。

m0_56451176的博客 340

ASPICE学习笔记

ASPICE的全称是Automotive SPICE。

汽车电子软件领域知识分享 1355

CountDownLatch详解

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

抽象的螺旋 2万+

游戏服务器框架之跨服(一)

如今的游戏开发,不搞个跨服玩法都不好意思说在做游戏了(当然,也跟游戏类型有关,一些轻度休闲游戏可以排除在外)。跨服玩法的设计,可以进一步激发玩家追求高战力的虚荣心,也可以汇聚玩家数量,避免单服日活跃低呈现死服现象。 几种常见的跨服玩法拓扑结构 一,不同游戏服的玩家进入中立服务器进行战斗,例如跨服天梯类玩法。 游戏服有很多个节点,中心服务器也有很多节点。只要保证对战的双方同时进入同一个中心服游戏进程即可。 二,若干个游戏服组成一个社区,全部服务器包含多个社区,例如世界服玩法。 三,游戏服A玩

littleschemer的博客 5772

CountDownLatch Demo

CountDownLatch类可以设置一个计数器,然后通过countDown方法来进行减1的操作,使用await方法等待计数器不大于0,然后继续执行await后面的方法之后的语句 CountDownLatch主要有两个方法,当一个或多个线程调用await方法时,这些线程会阻塞 其他线程调用 countDown 方法会将计数器减1(调用countDown方法的线程不会阻塞) 当计数器的值变为0时,因为await方法阻塞的线程会被唤醒,继续执行 2、未用CountDownLatch 会出现主方法抢在线程方法之前

weixin_40964170的博客 342

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

8.2 JUC - 5.CountdownLatch

其中构造参数用来初始化等待计数值,await() 用来等待计数归零,countDown() 用来让计数减一。,等待所有线程完成倒计时。

白羊座的橙子 170

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

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

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

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

CountDownLatch详解以及用法示例

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

liu_da_da的博客 4万+

Java并发之CountDownLatch的基本使用

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

王员外的博客 6693

【线程池】线程同步器CountDownLatch

CountDownLatch的原理和ReentrantLock的原理类似,都是基于AQS实现的。CountDownLatch 用于阻塞当前 1 个或多个线程,其目的是让这些线程等待其它线程的执行完成。可以简单将其理解为一个计数器,当初始化一个 count=n 的 CountDownLatch 对象之后,需要调用该对象的 CountDownLatch#countDown 方法来对计数器进行减值,直到计数器为 0 的时候,等待该计数器的线程才能继续执行。

weixin_44823875的博客 6041

CountDownLatch使用小Demo

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33991418的博客 182

Java并发工具CountDownLatch使用详解

通过使用 CountDownLatch可以使当前线程阻塞,等待其他线程完成给定任务。可以类比旅游团导游要等待所有的游客到齐后才能去下一个景点。 CountDownLatch主要应用场景:一个线程等待多个线程完成给定任务后,然后执行后续的操作的场景。

warybee 1万+

Java并发 - CountDownLatch详解

`CountDownLatch` 是 Java 中的一个同步工具类,它允许一个或多个线程等待其他线程完成操作。`CountDownLatch` 的主要思想是,一个线程等待其他线程完成一组操作,它在倒计时计数器的基础上工作,计数器的初始值是一个正整数,每当一个线程完成一项操作,计数器的值减一。当计数器的值变为零时,等待的线程被释放,可以继续执行。

--土拨鼠-- 2554

并发编程工具类-CountDownLatch的使用和原理解析

1、CountDownLatch 概念 CountDownLatch可以使一个获多个线程等待其他线程各自执行完毕后再执行。 CountDownLatch 定义了一个计数器,和一个阻塞队列, 当计数器的值递减为0之前,阻塞队列里面的线程处于挂起状态,当计数器递减到0时会唤醒阻塞队列所有线程,这里的计数器是一个标志,可以表示一个任务一个线程,也可以表示一个倒计时器,CountDownLatch可以解决那些一个或者多个线程在执行之前必须依赖于某些必要的前提业务先执行的场景。 2、CountDownLatch 常用

stay hungry,stay foolish! 950

14、详解java同步工具类CountDownLatch

这篇文章主要讲解java中一个比较常用的同步工具类CountDownLatch,不管是在工作还是面试中都比较常见。我们将通过案例来进行讲解分析。 一、定义 CountDownLatch的作用很简单,就是一个或者一组线程在开始执行操作之前,必须要等到其他线程执行完才可以。我们举一个例子来说明,在考试的时候,老师必须要等到所有人交了试卷才可以走。此时老师就相当于等待线程,而学生就好比是执行的线程。 注...

冯冬冬的博客 2377

Java并发编程之CountDownLatch

一、概述 作用:可以用来确保某些活动直到其他活动都完成后才继续执行。它一个同步工具,一般被称作"计数器",作用大致就是数量达到了某个点之后计数结束,才能继续往下走。可以用作流程控制之类的作用,主流程分成多个子流程,然后主流程在子流程全部结束之前不动(子流程最好是相互独立的,除非能很好的控制两个流程的关联关系),子流程全部结束后主流程开始操作。应用场景:CountDownLatch非常适合于对任务进行拆分,使其并行执行,比如某个任务执行2s,其对数据的请求可以分为五个部分,那么就可以将这个任务拆分为5个子任

Flychuer的专栏 4215

CountDownLatch基本使用及原理

CountDownLatch是一个线程同步工具类,它可以让一个或多个线程等待其他线程完成某个任务后再继续执行。它通过一个计数器来实现,计数器的初始值可以设置为一个正整数,每当一个线程完成任务后,计数器的值就会减1,当计数器的值变为0时,所有等待的线程就会被唤醒。AbstractQueuedSynchronizer是一个用于构建锁和同步器的基类,它提供了一个框架,供子类重写并实现自己的同步逻辑。AQS内部维护了一个FIFO的等待队列,用于管理等待获取锁的线程,并提供了一些方法供子类操作这个队列。

qq_39939541的博客 4169
上一篇: Thinking inJava学习笔记 HorseRace.java
下一篇: Thinking in java 哲学家进食问题
fantasyagain
博客等级 码龄19年 18粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值