计数器:CountDownLatch,循环栅栏:CyclicBarrier

Java+CountDownLatch多任务处理优化 前言 项目有许多统计的功能,有些统计页面,要展示几个统计的结果,用户通过前台设置相关参数,后台实时统计并返回数据。后台查询正常查询结果是串行的。 最好的用户体验,就是每一个操作都可以实时的展示数据,3秒之内应该是用户的忍受范围之内的了,所以做一款产品不仅要考虑用户交互设计,后端的优化也是比不可少的。 举一个物流项目例子: 1:统计订单量 2:统计物流信息的时效 3:统计客户下单量(按高到低排序) 大家可以简单的看下以上这3项统计数据,总体来说,统计量还是不少的。最主要的还是要实时、实时、实时(重要的事情说三 阅读详情
//	创建2个线程的线程池 
Executor executor =	Executors.newFixedThreadPool(2);
while(存在未对账订单){		
    //	计数器初始化为2		
    CountDownLatch latch = new CountDownLatch(2);		
    //	查询未对账订单		
    executor.execute(()->{
        pos = getPOrders();				
        latch.countDown();		
    });		
    //	查询派送单		
    executor.execute(()->{
        dos = getDOrders();				
        latch.countDown();		
    });				
    //	等待两个查询操作结束		
    latch.await();				
    //	执⾏对账操作		
    diff = check(pos, dos);		
    //	差异写⼊差异库		
    save(diff); 
}
计数器

CountDownLatch: 一个线程等待多个线程。

//定义一个初始值为2的计数器
CountDownLatch latch = new CountDownLatch(2);
//计数器-1
latch.countDown();
//线程等待,等待至计数结束。
latch.await();

CyclicBarrier:多个线程相互等待,等待结束执行回调。

//创建一个初始值为2得计数器	
CyclicBarrier barrier =	 new CyclicBarrier(2, 
                    ()->{ executor.execute(()->check()); //回调函数	                                               
});	
//等待
barrier.await();
  • 调用await()计数器减1,同时等待计数器变为0。
  • 当计数器减到0时持有barrier.await()的线程会向下执行,同时调用barrier的回调函数。
  • 可以循环利用,具备自动重置功能。
总结:

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

大厂之路一由浅入深、并行基础、源码分析一 “J.U.C.L”之倒计数器CountDownLatch、循环栅栏CyclicBarrier源码级分析(基于AQS、共享锁) AQS 定义了两种资源共享方式:倒计数器CountDownLatch:倒计数器CountDownLatch的结构:倒计数器CountDownLatch的方法:倒计数器CountDownLatch的使用:CountDownLatch 实现原理循环栅栏CyclicBarrier循环栅栏CyclicBarrier的结构:循环栅栏CyclicBarrier的函数列表:循环栅栏CyclicBarrier的使用: AQS 定义了两种资源共享方式: Exclusive: 独占,只有一个线程能执行,如Reentrant. 阅读详情

相关推荐

JAVA 并发工具类介绍

JAVA的并发工具类,如CountDownLatch、Semaphore、CyclicBarrier等,可以来协调多个线程的执行顺序和并发访问。

hcjdhsjs的博客 1077

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

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

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

Java中使用CountDownLatch实现并发流程控制

CountDownLatch,它是 JDK 提供的并发流程控制的工具类,它是在 java.util.concurrent 包下,在 JDK1.5 之后加入的。应用场景举例:5个运动员参加马拉松比赛,好比五个线程,每个人跑完的时间不同,而比赛成绩统计必须要等待5个运动员都跑完才能往下进行。实现流程可以参考下图。...

BADAO_LIUMANG_QIZHI的博客 1069

CountDownLatch 是如何安排线程执行顺序的?

CountDownLatch,它是 JDK 提供的并发流程控制的工具类,它是在 java.util.concurrent 包下,在 JDK1.5 以后加入的 比如我们去游乐园坐激流勇进,有的时候游乐园里人不是那么多,这时,管理员会让你稍等一下,等人坐满了再开船,这样的话可以在一定程度上节约游乐园的成本。座位有多少,就需要等多少人,这就是CountDownLatch的核心思想,等到一个设定的数值达到之后,才能出发 流程图 把激流勇进的例子用流程图的方式来表示 最开始 CountDownLatc..

vincent_wen0766的博客 1242

深入学习FIFO

深入理解FIFO、同步FIFO和异步FIFO、FIFO设计的难点以及FIFO深度计算

好好学习,天天向上 2647

CATIA高效设计:自定义快捷键全攻略

本文详细介绍了如何在CATIA中自定义快捷键以提升设计效率。通过减少鼠标依赖、优化工作流程和减轻手腕疲劳,合理设置快捷键可显著提高建模速度。文章提供了从基础设置到高级配置的全流程指南,包括解决冲突、推荐方案及外设扩展建议,帮助用户快速掌握CATIA高效设计技巧。

weixin_42648844的博客 584

Java多线程编程-(6)-两种常用的线程计数器CountDownLatch和循环屏障CyclicBarrier

前几篇:Java多线程编程-(1)-线程安全和锁Synchronized概念Java多线程编程-(2)-可重入锁以及Synchronized的其他基本特性Java多线程编程-(3)-线程本地ThreadLocal的介绍与使用Java多线程编程-(4)-线程间通信机制的介绍与使用Java多线程编程-(5)-使用Lock对象实现同步以及线程间通信倒计时CountDownLatchCountDownLat

徐刘根的博客 8628

CTS实战:如何用set_sense优化时钟树平衡(附ICC2避坑指南)

本文深入探讨了在时钟树综合(CTS)中,如何正确使用`set_sense`命令优化时钟树平衡,并对比了其与`set_disable_timing`的本质区别。通过实战案例详细解析了`-stop_propagation`和`-clock_leaf`参数的应用场景,并提供了ICC2工具中的关键避坑指南,帮助后端工程师精准控制时钟拓扑,避免时序分析漏洞。

weixin_28933797的博客 459

信号量Semaphore,读写锁ReadWriteLock,计数器CountDownLatch,循环栅栏CyclicBarrier运用

1.信号量Semaphore: 像synchronized, ReentrantLock等这些对临界区资源进行同步后,所有对临界区资源进行访问的线程都得串行排队,而信号量允许指定的线程数同时进行访问 demo: import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import ...

欣淡定的博客 609

【MATLAB/Simulink】从模型到飞行:基于PX4与Rflysim的无人机MBD实战指南

本文详细介绍了基于MATLAB/Simulink与PX4、Rflysim的无人机模型开发与飞行控制实战指南。通过MBD(基于模型设计)方法,从建模、仿真到代码生成与硬件部署,实现无人机开发的高效闭环。文章涵盖开发环境搭建、动力学建模、控制算法实现及测试验证全流程,为无人机开发者提供实用技巧与优化建议。

weixin_30181209的博客 410

将指定文件夹下每张用LabelImg标注的图片中标注部分抠出来保存到指定文件夹下。

将指定文件夹下每张用LabelImg标注的图片中标注部分抠出来保存到指定文件夹下。

weixin_44119674的博客 440

倒计数器:CountDownLatch | 循环栅栏:CyclicBarrier

倒计数器:CountDownLatch         CountDownLatch从名字就可以看出其作用:初始化一个计数,然后每次递减,直至为0,然后触发一个动作。只有一个带参构造器: public CountDownLatch(int count);        主要提供了以下方法: // 等待计数器为0 public void await() throws InterruptedEx

Fouy_风度玉门。 794

107.在 Vue 3 中使用 OpenLayers 实现视图联动功能

是一个非常强大的 Web 地图渲染库,支持多种地图数据格式和交互操作。在 Vue 3 中,我们可以利用。绑定到真实的 DOM 元素上,我们就可以用它们来初始化 OpenLayers 地图。来封装和管理 OpenLayers 地图的状态,从而更高效地开发地图应用。,即两个地图窗口共享同一个视图(View),从而实现同步缩放、拖动等操作。这可以确保 Vue 组件销毁时,OpenLayers 也正确销毁地图实例。,并且它们会同步缩放和拖动,达到地图联动的效果。这样,无论你拖动哪个地图,另一个都会同步变化。

小彭的博客 1938

(Java 高并发程序设计) 一篇文章带你深入了解多线程中的倒计数器(CountDownLatch)和循环栅栏(CyclicBarrier)

文章目录一、倒计数器:CountDownLatch二、循环栅栏:CyclicBarrier 一、倒计数器:CountDownLatch CountDownLatch 是一个非常实用的多线程控制工具类。“Count Down” 在英文中意为倒计数,Latch 意为门闩的意思。如果翻译成为倒计数门闩,我想大家都会不知所云吧!因此,这里简单地称之为倒计数器。在这里,门闩的含义是把门锁起来,不让里面的线程跑出来。因此,这个工具通常用来控制线程等待,它可以让某一个线程等待直到倒计数结束,再开始执行。 对于倒计数器,一

南淮北安的博客 814

宇树G1二次开发资料汇总

宇树科技G1是一款29自由度的商业级人形机器人,配备NVIDIA Jetson Orin NX计算平台和完整SDK生态。本文系统介绍了G1的硬件架构、29个关节配置、传感器外设、双计算单元设计等关键信息,并详细解析了软件生态体系,包括C++/Python SDK、ROS2接口、仿真工具和AI框架。开发者可通过DDS通信实现高层运动控制或底层关节级精确控制,支持快速二次开发。文档提供了网络配置、接口调用示例等实用指南,帮助开发者高效利用该平台进行人形机器人应用开发。

m0_47999117的博客 1313

蓝桥杯 stm32 PWM 测量频率

参考 数据手册:比赛 的板子 上面有两个信号发生器,如下图。通过 扭动 可变电阻 (R40, R39), 来实现 PWM 频率的改变。PA15PB4。PA15,PB4分别使用TIM2_CH1TIM3_CH1来对频率进行捕获。

wuyiyu_的博客 2931

JUC辅助类(CountDownLatch计数器,CyclicBarrier循环栅栏,Semaphore信号灯)

JUC辅助类(CountDownLatch计数器,CyclicBarrier循环栅栏,Semaphore信号灯)

weixin_44934883的博客 232

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

循环计数_倒计数器:CountDownLatch | 循环栅栏:CyclicBarrier

倒计数器:CountDownLatchCountDownLatch 从名字就可以看出其作用:初始化一个计数,然后每次递减,直至为0,然后触发一个动作。只有一个带参构造器: CountDownLatch(int count);主要提供了以下方法:// 等待计数器为0public void await() throws InterruptedException;// 等待计数器为0,增加超时限制pub...

weixin_35336900的博客 203

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

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

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【Java高并发】CountDownLatch(倒计数器) 和 CyclicBarrier(循环栅栏)

1、倒计数器——CountDownLatch CountDownLatch是一个多线程控制工具类,通常使用它来控制线程的等待,它可以让一个线程一直等待,直到倒计数结束,再开始执行 倒计数器的使用场景:火箭发射 在火箭发射前,需要对各项设备、仪器进行检查,当所有检查完成后,引擎才能点火。这里就可以使用CountDownLatch来控制点火线程需要等所有检查线程全部完工后再执行 CountDownLatch的构造函数接收一个int整数作为参数,即当前计数器的值,这个值代表需要等待的线程个数。每当一个线程完成了任

小李子还挺酸的博客 441

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

JUC框架(Semaphore、CountDownLatch、CyclicBarrier)

Semaphore(信号量)是Java并发包java.util.concurrent中的一个类,它主要用于控制对多个共享资源的访问。与CountDownLatch和CyclicBarrier等并发工具不同,Semaphore通常用于限制对某个资源池(或称为资源集)的并发访问数量CountDownLatch 是 Java 并发工具包 java.util.concurrent 中的一个类,它允许一个或多个线程等待其他线程完成一组操作。

A的博客 1264

CountDownLatch和CyclicBarrier

减数计数器和循环栅栏

qq_32428485的博客 4461

CyclicBarrier: 循环栅栏

CyclicBarrier是另外一种多线程并发控制工具。和CountDownLatch非常类似,它也可以实现线程间的计数等待,但它的功能比CountDownLatch更加复杂且强大。 CyclicBarrier可以理解为循环栅栏。栅栏就是一种障碍物,比如,通常在私人宅邸的周围就可以围上一圈栅栏,阻止闲杂人等入内。这里当然就是用来阻止线程继续执行,要求线程在栅栏外等待。前面Cyclic意为循环,也就是说这个计数器可以反复使用。比如,我们将计数器设置为10,那么凑齐第一批10个线程后,计数器就会归零,接着凑齐下

weixin_43939924的博客 371

CountDownLatch 和 CyclicBarrier

juc

weixin_43275578的博客 183

AQS中的同步器CyclicBarrier

在Java并发编程中,CyclicBarrier是一个比CountDownLatch更强大的同步工具类。它可以理解为一个“循环栅栏”,允许多个线程相互等待,直到所有线程都到达屏障点后再继续执行。

yl3236560971的博客 513

Java计数器之CountDownLatch、CyclicBarrier、Semaphore

Java计数器之CountDownLatch、CyclicBarrier、Semaphore 在Java里面有几种可以用于控制线程状态的方法,如CountDownLatch计数器、CyclicBarrier循环栅栏、Sempahore信号量。下面就分别演示下他们的使用方法: CountDownLatch CountDownLatch可以实现多线...

xingoo 143

常用并发工具原理分析(Condition、CountDownLatch、CyclicBarrier、Semaphore)

目录常用并发工具原理分析一、包含的知识点二、Condition原理2.1 Condition简单使用2.2 Condition await源码分析2.3 Condition signal源码分析2.4 被阻塞的线程唤醒后的操作2.5 总结三、CountDownLatch3.1 CountDownLatch作用3.2 CountDownLatch await源码分析3.3 CountDownLatch countdown源码分析四、CyclicBarrier4.1 CyclicBarrier知识4.2 Cyc

yewandemty的博客 723
上一篇: Java线程池ThreadPoolExecutor
下一篇: StampedLock悲观锁乐观锁
刘彦青-Yannis
博客等级 码龄10年 1万+粉丝 234原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘彦青-Yannis

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值