当前位置: 首页 > news >正文

Java | 多线程并发编程CountDownLatch实践

关注:CodingTechWork

引言

  在一次数据割接需求中,数据需要通过编程的方式进行转移割接到新平台,此时若串行化方式,无疑会拉锯此次战斗,所以首当其冲要使用并发编程来降低割接时长。
  本次主要考虑使用CountDownLatch工具类进行并发编程的控制。

CountDownLatch

概述

  在并发编程过程中,如何让多个线程之间协调执行任务,如主线程等所有其他异步线程执行完毕后再继续执行下面的步骤,如何做到?我们可以考虑使用CountDownLatch
  CountDownLatch主要是起到线程之间的同步协调作用,而不是互斥。它可以让一个线程等待其他线程完成任务后,再继续执行自己的任务。

原理

  1. CountDownLatch是基于计数器的原理,内部有一个整型的计数器。
  2. 在类中使用CountDownLatch时,需要制定一个初始的计数值,该值指定的事需要等待的线程数目。
  3. 关于计数值,每当完成一个线程任务时,会调用CountDownLatchcountDown()方法,计数器值就会递减1。当计数值递减到0时,就会唤醒等待的线程,继续执行等待线程的任务。

并发编程实践

基本用法

  1. 创建CountDownLatch对象,初始化指定计数值(等待线程数)。
  2. 创建多线程,线程执行完毕后,调用countDown()方法。
  3. 等待线程执行await()方法,等待计数值递减为0后继续执行本线程的程序。

代码模板

    public Boolean testCountDownLatchAsync() {ExecutorService taskExecutor = Executors.newFixedThreadPool(10);//初始化final CountDownLatch latch = new CountDownLatch(10);for (Integer customerId : customerIdList) {Runnable run = new Runnable() {@Overridepublic void run() {try {//异步执行代码} catch (Exception e) {log.error("线程执行失败!错误信息:", e);} finally {latch.countDown(); //每次调用CountDown(),计数减1}}};taskExecutor.execute(run);}try {//等待所有线程执行完毕latch.await();//主程序执行到await()函数会阻塞等待线程的执行,直到计数为0} catch (InterruptedException e) {e.printStackTrace();}taskExecutor.shutdown();//关闭线程池return true;}

总结

  CountDownLatch是一个同步工具类,主要应用于多线程编程场景中,可以用于控制等待线程的执行,或者说是协调多个线程之间的同步。
  用好这个工具类,主要关注这个工具类的初始计数值的设置、countDown()方法、await()方法即可实现编程。

相关文章:

Java | 多线程并发编程CountDownLatch实践

关注:CodingTechWork 引言 在一次数据割接需求中,数据需要通过编程的方式进行转移割接到新平台,此时若串行化方式,无疑会拉锯此次战斗,所以首当其冲要使用并发编程来降低割接时长。  本次主要考虑使用CountDownLatc…...

分布式定时任务系列6:XXL-job触发日志过大引发的CPU告警

传送门 分布式定时任务系列1:XXL-job安装 分布式定时任务系列2:XXL-job使用 分布式定时任务系列3:任务执行引擎设计 分布式定时任务系列4:任务执行引擎设计续 分布式定时任务系列5:XXL-job中blockingQueue的应用 …...

Spark RDD、DataFrame和Dataset的区别和联系

一、三种数据介绍 是Spark中的三种不同的数据结构,它们都可以用于分布式数据处理,但是它们的实现方式和使用方法略有不同。 RDD(弹性分布式数据集) RDD是Spark最初的核心数据结构,它是一个分布式的、只读的、可容错的…...

代码随想录算法训练营第四十五天|139.单词拆分、背包问题总结

LeetCode 139. 单词拆分 题目链接:139. 单词拆分 - 力扣(LeetCode) 这道题使用完全背包来实现,我们首先考虑字符串是否可以由字符串列表组成,因此dp数组大小为n 1 ,其意义是,在n个位置时是否能…...

深度学习卫星遥感图像检测与识别 -opencv python 目标检测 计算机竞赛

文章目录 0 前言1 课题背景2 实现效果3 Yolov5算法4 数据处理和训练5 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **深度学习卫星遥感图像检测与识别 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐…...

wxWidgets 3.2.4发布 —— 发布于2023年11月11日

稳定的3.2系列中的另一个版本现在可以在GitHub上获得。您可以在那里找到包含库源代码和文档的归档文件,以及所选Windows编译器(如Microsoft Visual C、MinGW-w64和TDM-GCC)的二进制文件。您还可以阅读此版本的更新文档,特别是&…...

PyQt6运行QTDesigner生成的ui文件程序

2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~共计18条视频,包括:2024版 PyQt6 Python桌面开发 视频教程(无废话版) 玩命更新中~、第2讲 PyQt6库和工具库Q…...

基于mediapipe的人手21点姿态检测模型—CPU上检测速度惊人

前期的文章,我们介绍了MediaPipe对象检测与对象分类任务,也分享了MediaPipe的人手手势识别。在进行人手手势识别前,MediaPipe首先需要进行人手的检测与人手坐标点的检测,经过以上的检测后,才能把人手的坐标点与手势结合起来,进行相关的手势识别。 MediaPipe人手坐标点检测…...

系统架构设计: 21 论敏捷软件开发方法及其应用

论敏捷软件开发方法及其应用 请围绕“敏捷软件开发方法及其应用”论题,依次从以下三个方面进行论述。 ①简述你所参与开发的运用了敏捷技术的项目,以及你所担任的工作; ②分析并讨论敏捷<...

【深度学习】脸部修复,CodeFormer,论文,实战

代码&#xff1a; https://github.com/sczhou/CodeFormer https://huggingface.co/spaces/sczhou/CodeFormer 论文&#xff1a;https://arxiv.org/abs/2206.11253 Towards Robust Blind Face Restoration with Codebook Lookup Transformer 文章目录 论文摘要1 引言2 相关工…...

OpenGL_Learn14(光照贴图)

1. 漫反射贴图 在光照场景中&#xff0c;它通常叫做一个漫反射贴图(Diffuse Map)&#xff08;3D艺术家通常都这么叫它&#xff09;&#xff0c;它是一个表现了物体所有的漫反射颜色的纹理图像。 我们会将纹理储存为Material结构体中的一个sampler2D 。我们将之前定义的vec3漫反…...

【JVM精讲与GC调优教程(概述)】

如何理解虚拟机(JVM)跨语言的平台 java虚拟机根本不关心运行在其内部的程序到底是使用何种编程语言编写的,他只关心“字节码”文件。 java不是最强大的语言,但是JVN是最强大的虚拟机。 不存在内存溢出? 内存泄露? JAVA = (C++)–; 垃圾回收机制为我们打理了很多繁琐的…...

蓝桥杯物联网竞赛_STM32L071_2_继电器控制

Stm32l071原理图&#xff1a; PA11与PA12连接着UNL2803 ULN2803是一种集成电路芯片&#xff0c;通常被用作高电压和高电流负载的驱动器。 ULN2803是一个达林顿阵列&#xff0c;当输入引脚&#xff08;IN1至IN8&#xff09;被连接到正电源时&#xff0c;相应的输出引脚&#xff…...

python之pyqt专栏2-项目文件解析

项目结构 在上一篇文章python之pyqt专栏1-环境搭建&#xff0c;创建新的pyqt项目&#xff0c;下面我们来看一下这个项目下的文件。 从下面的文件结构图可以看到&#xff0c;该项目下有3个文件&#xff0c;untitled.ui,untitled.py 以及main.py。 QtDesigner可以UI界面的方式&am…...

Kafka 集群如何实现数据同步

Kafka 介绍 Kafka 是一个高吞吐的分布式消息系统&#xff0c;不但像传统消息队列&#xff08;RaabitMQ、RocketMQ等&#xff09;那样能够【异步处理、流量消峰、服务解耦】 还能够把消息持久化到磁盘上&#xff0c;用于批量消费。除此之外由于 Kafka 被设计成分布式系统&…...

opencv- CLAHE 有限对比适应性直方图均衡化

CLAHE&#xff08;Contrast Limited Adaptive Histogram Equalization&#xff09;是一种对比度有限的自适应直方图均衡化技术&#xff0c;它能够提高图像的对比度而又避免过度增强噪声。 在OpenCV中&#xff0c;cv2.createCLAHE() 函数用于创建CLAHE对象&#xff0c;然后可以…...

IOS免签封装打包苹果APP的方法

IOS免签app封装打包苹果APP的方法如下&#xff1a; 准备一个未签名的IPA文件。获取一个企业证书或个人证书&#xff0c;用于签名IPA文件。将证书添加到Keychain Access中。安装iOS App Signer&#xff08;可以在网上找到相关下载链接&#xff09;。打开iOS App Signer&#xf…...

Springboot引入分布式搜索引擎Es RestAPI

文章目录 RestAPI初始化RestClient创建索引库删除索引库判断索引库是否存在总结 RestClient操作文档增加文档数据查询文档删除文档修改文档批量导入文档小结 RestAPI ES官方提供了各种不同语言的客户端&#xff0c;用来操作ES。这些客户端的本质就是组装DSL语句&#xff0c;通…...

Lua脚本解决redis实现的分布式锁多条命令原子性问题

线程1现在持有锁之后&#xff0c;在执行业务逻辑过程中&#xff0c;他正准备删除锁&#xff0c;而且已经走到了条件判断的过程中&#xff0c;比如他已经拿到了当前这把锁确实是属于他自己的&#xff0c;正准备删除锁&#xff0c;但是此时他的锁到期了&#xff0c;那么此时线程2…...

Vatee万腾独特科技力量的前沿探索:Vatee的数字化奇点

在当今科技的浪潮中&#xff0c;Vatee万腾以其独特的科技力量成为前沿探索的引领者&#xff0c;正迎来数字化奇点的新时代。Vatee万腾不仅仅是一家科技公司&#xff0c;更是一支探索未知领域、开创数字时代新局面的先锋力量。 Vatee万腾的数字化奇点体现在其对前沿技术的深刻理…...

医学影像分割新宠UNet 3+:从论文到落地,我是如何用它提升肝脏分割Dice系数的

UNet 3在肝脏CT分割中的实战优化&#xff1a;从数据增强到模型轻量化的完整闭环 当我在三甲医院放射科第一次看到医生手动勾画肝脏肿瘤轮廓时&#xff0c;那个下午改变了我对医学影像分割的认知。主治医师需要花费40分钟在单张CT切片上精确标注病灶区域&#xff0c;而一个典型病…...

GRBL固件源码深度解析:如何为你的DIY CNC雕刻机定制专属配置文件(以限位与主轴为例)

GRBL固件源码深度解析&#xff1a;如何为你的DIY CNC雕刻机定制专属配置文件&#xff08;以限位与主轴为例&#xff09; 当你第一次听到GRBL这个名词时&#xff0c;可能会觉得它只是一个普通的开源CNC控制固件。但当你真正开始使用它&#xff0c;特别是当你需要为自己的DIY CN…...

保姆级教程:用华为AC+AP搭建企业级Wi-Fi(旁挂三层+直接转发+漫游实战)

企业级Wi-Fi部署实战&#xff1a;华为ACAP旁挂三层组网与直接转发架构深度解析 当走进任何一家现代化企业的办公区域&#xff0c;稳定高速的无线网络已成为像水电一样的基础设施。但不同于家庭Wi-Fi的即插即用&#xff0c;企业级无线网络需要在覆盖范围、接入容量、安全策略和移…...

ShowHiddenChannels插件:3分钟解锁Discord隐藏频道查看权限的终极指南

ShowHiddenChannels插件&#xff1a;3分钟解锁Discord隐藏频道查看权限的终极指南 【免费下载链接】return-ShowHiddenChannels A BetterDiscord plugin which displays all hidden channels and allows users to view information about them. 项目地址: https://gitcode.co…...

告别ROS安装噩梦:用小鱼的一键脚本在Ubuntu 22.04上5分钟搞定ROS2 Humble

5分钟征服ROS2 Humble&#xff1a;小鱼一键脚本的极简安装哲学 第一次接触ROS时&#xff0c;我盯着官方文档里密密麻麻的依赖项和时不时报错的rosdep&#xff0c;差点以为自己在破解某种加密系统。直到发现小鱼的那个绿色终端界面——原来安装ROS可以像喝咖啡一样简单。这不是又…...

低功耗工控机在电池供电机器人中的应用

大家好&#xff0c;我是阿强&#xff0c;在工控行业深耕了 17 年。如今&#xff0c;移动机器人已经广泛应用于物流、仓储、巡检、配送等各个领域&#xff0c;而续航能力一直是制约移动机器人发展的关键因素。电池供电的机器人对控制单元的功耗有着非常严格的要求&#xff0c;低…...

如何快速掌握网盘直链下载助手:八大网盘下载加速终极教程

如何快速掌握网盘直链下载助手&#xff1a;八大网盘下载加速终极教程 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 &#xff0c;支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天…...

3分钟突破百度网盘密码屏障:baidupankey终极解决方案

3分钟突破百度网盘密码屏障&#xff1a;baidupankey终极解决方案 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 你是否曾在百度网盘资源面前束手无策&#xff1f;当急需的学习资料、工作文件或娱乐资源就在眼前&#xff0c;却…...

别再手动跑脚本了!用Docker Compose 5分钟搞定Apache DolphinScheduler 3.1.3部署

5分钟容器化部署Apache DolphinScheduler&#xff1a;告别繁琐配置的DevOps实践 每次看到团队新成员花一整天时间折腾环境配置&#xff0c;我就想起自己曾经被各种依赖和配置文件支配的恐惧。直到发现Docker Compose这个神器&#xff0c;才真正体会到什么叫"开箱即用"…...

从零手搓一个DES-CBC加密库:用C语言一步步还原经典算法(附完整源码)

从零手搓一个DES-CBC加密库&#xff1a;用C语言一步步还原经典算法&#xff08;附完整源码&#xff09; 在嵌入式系统和教学场景中&#xff0c;理解加密算法的底层实现往往比单纯调用现成库更有价值。本文将带你从零开始实现DES-CBC加密算法&#xff0c;不仅剖析每个核心组件的…...