(二)并发工具类CountDownLatch(门闩)与CyclicBarrier(栅栏)

Java并发工具篇--CountDownLatch,CyclicBarrier, Semaphore 全面分析,快速掌握 前言 随着天气的逐渐变热,整个人也开始浮躁不安 当然这里说的不是我,因为我是一个比较安静的人 讲的是隔壁的老大哥,在训斥年幼的孩子 一通吼叫过后,男人安静了下来,孩子也哭个不停 简介 前面我们介绍了 JUC 中的并发容器,它相当于一个同步容器的升级版,很大程度上提高了并发的性能 今天我们来介绍 JUC 中的并发工具,它主要是通过改变自身的状态来控制线程的执行流程; 常见的有如下几种: CountDownLatch:倒计时器(属于闭锁的一种实现),用来阻塞线程 CyclicBarrier:循环栅栏,类似倒计 阅读详情

CountDownLatch(门闩)和CyclicBarrier(栅栏)

CountDownLatch 实现线程等待

如何实现主线程需要等待子线程运行完毕才能运行,Java 并发包里已经提供了实现类似功能的工具类:CountDownLatch?
定义:让一些线程阻塞直到另一些线程完成一些列操作之后才被唤醒。即使门闩的意思,给定一个数,当这个数被减到0时才能开始运行另一个线程。

主要有两个方法一个是await方法等待,一个是countDown方法让门闩减一。
可以简单理解为:
从自助餐拿的吃的必须吃完才会开门放人离开,不然打断腿。

public class Test06_CountDownLatchDemo {
    static CountDownLatch countDownLatch = new CountDownLatch(5);
    public static void main(String[] args) throws InterruptedException {
        for(int i = 0;i<5;i++){
            final int temp = i;
            new Thread(()->{
                System.out.println(Thread.currentThread().getName()+'\t'+"吃完了蛋糕"+temp);
                countDownLatch.countDown();
            }).start();
        }
        countDownLatch.await();
        System.out.println("吃完了");
    }
}

CyclicBarrier 实现线程同步

CountDownLatch 主要用来解决一个线程等待多个线程的场景,可以类比旅游团团长要等待所有的游客到齐才能去下一个景点;CyclicBarrier 是一组线程之间互相等待,更像是几个驴友之间不离不弃。除此之外 CountDownLatch 的计数器是不能循环利用的,也就是说一旦计数器减到 0,再有线程调用 await(),该线程会直接通过。但 CyclicBarrier 的计数器是可以循环利用的,而且具备自动重置的功能,一旦计数器减到 0 会自动重置到你设置的初始值。除此之外,CyclicBarrier 还可以设置回调函数。

需要对应个数的线程都完成相应的操作后,才能顺序执行。

public class T07_TestCyclicBarrier {
    public static void main(String[] args){
        CyclicBarrier barrie = new CyclicBarrier(20,()->{
           System.out.println("满人");
        });
        for(int i = 0;i<100;i++){
            new Thread(()->{
                try {
                    barrie.await();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                } catch (BrokenBarrierException e) {
                    e.printStackTrace();
                }

            }).start();
        }
    }
}

JAVA 并发编程之三:CountDownLatch(门闩)、CyclicBarrier(栅栏)和Semaphore(信号量) 三种并发策略 在JDK的并发包中已经提供了几个非常有用的并发工具类。CountDownLatch、CyclicBarrier和Semaphore工具类中提供了一种并发流程控制的手段,Exchanger工具类提供了在线程间交换数据的一种手段。 1、等待多线程完成的CountDownLatch CountDownLatch类位于java.util.concurrent包下,利用它可以实现类似计数器的功能。比如有... 阅读详情

相关推荐

第042篇 CountDownLatch 与 CyclicBarrier:等待与协作

并发工具类这题,答对定义的人很多,答对的人很少。面试官很少问"它是什么",问的都是"计数没归零会怎样""屏障人数对不上会怎样""await会不会一直阻塞"。这些才是真实项目里最容易出事的地方,也是这题的采分点。和都基于 AQS 的共享模式实现,但语义完全不同。是一次性的——计数只减不增,归零后持续保持打开状态,重复await立刻返回,适合"等若干个任务完成"或"等某个信号到来"。是——所有参与方await到齐后一起通过,随后计数自动重置进入下一轮,适合"分阶段并行计算"。而Semaphore。

郑伟强dev的专栏 28

java多线程-线程间的通讯-门栓(减数器)

/** * 线程间的通讯 -门栓 或 门闸 或 减数器 * 使用方法很简单 * new CountDownLatch(3);//声明定义 多少个门栓,如果有3个,那个需要调用3次countDown()方法后,才能执行到await()方法 * countDownLatch.await(); //等待门栓全部打开,才会执行 * countDownLatch.countDown();//...

小罗 622

FPGA设计中的扇出约束实战:从XDC到代码优化的全流程解析

本文全面解析FPGA设计中扇出约束的重要性与应用,详细介绍了从XDC约束文件设置到HDL代码优化的全流程实战技巧。通过MAX_FANOUT约束控制信号负载,结合寄存器复制和物理优化策略,有效解决高扇出导致的时序违例和布线拥塞问题,提升设计性能和可靠性。

nept的博客 797

【多线程_并发工具】 栅栏_CyclicBarrier

栅栏:阻塞一组线程直到某个事件发生。 从概念理解起来,你可能会说:这不和闭锁一样吗? 栅栏和闭锁的最大区别就是: 所有线程必须同时到达栅栏位置,才能执行。 闭锁:用于等待时间。 栅栏:用于等待其他线程。 除此之外,闭锁是一次性对象,一旦进入终止状态,就不能重置。而栅栏可以使一定数量的参入方反复的在栅栏位置汇集。 栅栏的主要方法: await() awa

kingzma的专栏 1097

从CORDIC到DDS:手把手拆解《Verilog传奇》第9章的实战项目(附可跑通的代码)

本文详细解析了如何从CORDIC算法到DDS系统的完整实现过程,基于《Verilog传奇》第9章的实战项目,提供了可运行的Verilog代码。内容涵盖CORDIC算法的硬件实现、DDS系统架构设计、完整系统集成与验证,以及实际部署中的性能调优技巧,适合数字IC和FPGA开发者深入学习。

weixin_42623010的博客 414

【科普知识】什么是驱控一体化伺服电机?

驱控一体化伺服电机以其高度的集成性、兼容性、便捷性以及卓越的性能表现,成为了现代工业自动化领域的一颗璀璨明珠。对于那些追求高效、精准、智能控制的行业用户而言,它无疑是一种理想的选择。

m0_46512607的博客 3151

Java并发包的门栓

package ThreadLearn; /** * 曾经的面试题:(淘宝?) * 实现一个容器,提供两个方法,add,size * 写两个线程,线程1添加10个元素到容器中,线程2实现监控元素的个数,当个数到5个时,线程2给出提示并结束 * * 给lists添加volatile之后,t2能够接到通知,但是,t2线程的死循环很浪费cpu,如果不用死循环,该怎么做呢? * * 这里...

小胖的博客 1081

量化交易如何利用涨停板策略收割散户

量化交易通过算法筛选特定特征的股票,在早盘建立底仓后,利用大单拉升制造抢筹假象,吸引散户跟风买入。这种策略利用了散户的认知偏差,如锚定效应和从众心理,导致次日低开闷杀。从技术实现来看,量化策略通过控制买入量、隐藏真实意图等手段,精准执行隔日砸策略。对于短线交易者而言,理解量化资金的运作逻辑和识别危险涨停板的特征至关重要,这包括观察封板时间、盘口挂单、量价关系等多维度数据。在算法主导的市场中,散户需要升级交易工具和策略,从预测走势转向应对走势,才能避免成为量化策略的牺牲品。

weixin_33046983的博客 288

Java并发之信号量、倒计数门闩、循环栅栏和LockSupport

1、信号量(Semaphore) 信号量(Semaphore)是对锁的扩展,内部锁synchronized和重入锁ReentrantLock一次都只允许一个线程访问一个资源,而信号量却可以指定多个线程同时访问某个资源。 // 指定准入数,即能同时申请多少个许可 public Semaphore(int permits) // fair指定是否公平 public Semaphore(int...

Rogera的博客 1609

USB 3.0 高清音视频采集芯片——MS2130

MS2130 是一款 USB 3.0 高清视频和音频采集芯片,内部集成 USB3.0 Device 控制器、数据收发模块、音视频处理模块。

YOU_SeMi的博客 7859

在轻量化与精度之间取得平衡:YOLOv8 + GhostNet 的设计与实验分析

摘要: GhostNet系列(GhostNet、GhostNetv2、GhostNeXt)通过“幽灵特征图”技术,以极低计算量生成丰富特征,为YOLOv8提供轻量化改造方案。该技术能在减少参数量与计算量的同时保持或提升检测精度,适用于边缘设备部署。实现时需替换YOLOv8的Backbone为GhostNet模块,并通过消融实验验证其有效性。实验数据表明,改造后的模型在参数量降低30%的同时,推理速度提升28.6%,mAP@0.5最高提升1.9个百分点,平衡了轻量化与精度,为毕设提供技术创新性与工程落地性的双

m0_64661770的博客 194

CyclicBarrier 高并发的使用

CyclicBarrier是Java中java.util.concurrent并发包里的一个工具类。作用就是控制多个线程同时等待某个事件的执行才会一起执行。使用场景:多用于多个子线程等待主线程执行完毕后执行的场景。两个重要构造方法:new CyclicBarrier(int)int为等待的线程的个数。 new CyclicBarrier(int,Runnable)Runnable为等待的线程被触发

卡夫卡 696

告别传统RAG的痛点!Agent Skills让知识库检索更智能(本地知识库搭建新思路:用Agent Skills实现渐进式检索)

传统RAG在知识库检索中存在文档结构丢失、Token消耗大等问题 📚 Agent Skills通过分层索引、渐进式检索等设计,实现了更智能的本地知识库检索方案 🤖 本文详细介绍了Agent Skills的核心设计理念、与传统RAG的对比以及实践建议,帮助你搭建高效的知识库系统 ✅

XiaoqiangClub的博客 693

面试官:CyclicBarrier 和 CountDownLatch的区别是什么?

已重置),但这次没有额外动作。(打印消息),然后一起开始。都是 Java 并发包。

牛马baby的博客 1794

【异常】Cursor 模型服务地域访问限制报错的完整排查与解决方案This model provider doesn‘t serve your region

其本质是:Cursor客户端依赖的上游大语言模型服务提供商,基于自身服务的合规运营范围,对客户端发起的请求进行了来源地域权限校验;当系统检测到请求的网络来源地域,不在该模型服务商官方授权提供服务的地域范围内时,会触发服务访问拦截策略,拒绝响应本次模型调用请求,最终在客户端抛出该报错。合规声明:本文所提供的所有方案,均仅用于技术问题排查与解决,请您在使用过程中严格遵守当地法律法规,以及对应软件与模型服务提供商的用户协议与合规要求。更多关于AI+教育领域的干货,可以关注我的微信公众号一时间获取哦~

奶爸的编程之路,也就一周冷个三天 1134

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

面试必知必会(8):CountDownLatch、CyclicBarrier、Semaphore、Exchanger

本文是Java多线程面试系列文章之一,重点解析CountDownLatch和CyclicBarrier两种同步工具。CountDownLatch是"主等从"的一次性计数器,用于主线程等待多个子线程完成任务,基于AQS实现,通过countDown()递减计数,await()阻塞等待。典型场景包括服务启动等待、结果汇总和并发测试。CyclicBarrier则是可重复使用的"栅栏",让多个线程相互等待,支持回调任务,适用于分阶段任务和多轮同步。两者核心区别在于使用模式(主从

从基础到源码解析的学习记录 1328

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

Java并发工具类详解:CountDownLatch、CyclicBarrier及AQS共享模式的底层实现

Java并发工具类详解:CountDownLatch、CyclicBarrier及AQS共享模式的底层实现

daweias的博客 938

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

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

jre9下载 jdk9

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

多线程并发工具类 CountDownLatch,CyclicBarrier,Semaphore

1.什么是控制并发流程? 控制并发流程的工具类,作用就是帮助我们更容易得让线程之间合作 让线程之间相互配合,来满足业务逻辑 比如让线程A等待线程B执行完毕后再执行等合作策略 2.常用的控制并发流程工具类概述 类 作用 说明 Semaphore 信号量,可以通过控制‘许可证’的数量,来保证线程之间的配合 线程只有拿到许可证后,才能继续运行,相比其他同步器,更灵活 CyclicBarrier 线程会等待,直到足够多的线程到达了事先规定的数目。一旦达到触发条件,就可以

法毅的博客 792

Java并发原生工具:同步工具(CountDownLatch和CyclicBarrier)

CountDownLatch:一次性倒计时器,主线程等待N个子任务完成(如服务启动协调) CyclicBarrier:可循环使用的栅栏,N个线程相互等待后集体放行(适合多阶段并行计算) Semaphore:信号量控制资源并发访问数(适用于限流、连接池场景)

乐只悠悠 1829

多线程/并发编程——同步工具类(CountDownLatch、Semaphore、ReadWriteLock、CyclicBarrier )

多线程/并发编程——同步工具类 文章目录多线程/并发编程——同步工具类一、CountDownLatch二、Semaphore三、ReadWriteLock四、CyclicBarrier 上一篇文章中,我们详细剖析了并发工具包 J.U.C 的底层实现 AQS 的细节,不过只解释了基于 AQS 的最常用的同步工具锁 ReentrantLock。诚然 ReentrantLock 是很常用、很重要的一个同步工具类。不过基于 AQS 其实还有很多同步工具类,下面我们就来学习一下这些同步工具类的简单实用 本篇文章中只

qq_42583242的博客 716

【并发编程】CountDownLatch与CyclicBarrier

CountDownLatch 简介 CountDownLatch,意思是倒数门闩。它的作用是多个线程做汇聚。主线程开启了 A、B、C 三个线程做不同的事情,但是主线程需要等待 A、B、C 三个线程全部完成后才能继续后面的步骤。此时就需要 CountDownLatch 出马了。CountDownLatch 会阻塞主线程,直到计数走到 0,门闩才会打开,主线程继续执行。而计数递减是每个线程自己操作 CountDownLatch 对象实现的。 这种场景很常见:篮球比赛中,作为控球后卫,如果没有快攻机会,..

蜂蜜柚子茶 330

并发工具类深度对比:CountDownLatch vs CyclicBarrier——一次性等待与循环屏障的选择艺术

摘要:Java并发编程中,CountDownLatch和CyclicBarrier是解决线程协同的核心工具。CountDownLatch用于一次性等待事件完成,核心是单向等待的不可重置计数器;CyclicBarrier用于多线程循环协同,支持可重置的屏障点。两者在可重用性、等待逻辑(单向vs相互)、底层实现(AQS vs ReentrantLock)和异常处理机制上存在本质差异。正确场景选择是关键:一次性等待用CountDownLatch更轻量,循环分阶段协同用CyclicBarrier。常见错误包括计数器

huahua8088的博客 936

并发工具类:CountDownLatch / CyclicBarrier / Semaphore 怎么选?

`CountDownLatch`、`CyclicBarrier`、`Semaphore` 这三个类经常被放在一起问,因为它们看起来都是"让线程等一等",但语义完全不同——一个是"等别人干完活",一个是"大家互相等齐",一个是"抢名额"。这篇把三者的核心区别讲清楚,顺带认识一下用得较少但同样值得了解的 `Exchanger`。

NPE2.0的博客 504

java控制并发流程CountDownLatch、Semaphore、Condition、CyclicBarrier的基础学习

CyclicBarrier和CountDownLatch的区别 ① 作用不同:CyclicBarrier要等固定数量的线程都到达了栅栏位置才能继续执行,而CountDownLatch只需等待数字到0,也就是说,CountDownLatch用于事件,但是CyclicBarrier是用于线程的 ② 可重用性不同:CountDownLatch在倒数到0并触发门闩打开后,就不能再次使用了,除非新建新的实例,而CyclicBarrier可以重复使用

weixin_46665411的博客 895

两种线程“等待”,“门闩”和“栅栏”

CountDownLatch(门闩)和CyclicBarrier(栅栏)都是java.concurrent里的多线程控制工具类,我这里说他们两个都是控制线程等待,它们都像是一个计数器,让某一个线程等待计数完成后再执行,但是又有些不同,CountDownLatch是通过计数完成后才执行线程来控制线程等待,而CyclicBarrier可以是线程执行到某一处后等待计数,计数完成后再继续执行。 简单来说...

大力海棠的博客 981

java并发编程的重要工具类CountDownLatch和CyclicBarrier

java并发编程的重要工具类CountDownLatch和CyclicBarrier

qq_40388552的博客 332
上一篇: (一)并发工具类Lock与Condition
下一篇: (三)并发工具类Semaphore(真正的限流器)
香草星冰乐
博客等级 码龄7年 21粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值