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

CountDownLatch和CyclicBarrier

JUC(Java.util.concurrent)是Java 5中引入的一个并发编程库,它包含了许多用于多线程处理的工具类和接口。JUC主要提供了以下特性:

  1. 线程池:线程池可以提高线程的使用效率,避免频繁地创建和销毁线程,从而使得应用程序的性能得到提升。

  2. 并发集合类:JUC提供了一些线程安全的集合类,如ConcurrentHashMap、CopyOnWriteArrayList等,可以在多线程环境下安全地操作集合。

  3. 原子操作类:JUC提供了一些原子操作类,如AtomicInteger、AtomicLong等,可以在多线程环境下安全地操作共享变量。

  4. 同步器:JUC提供了一些同步器,如Semaphore、CountDownLatch、CyclicBarrier等,可以协调多个线程之间的执行。

  5. 并发工具类:JUC还提供了一些并发工具类,如Lock、Condition等,可以代替传统的synchronized关键字,提供更灵活、更高效的线程同步机制。

CountDownLatch和CyclicBarrier都是Java中用于多线程编程的工具类,属于同步器的一种。它们都可以用于控制多个线程的执行顺序。

 代码示例

CountDownLatch 

介绍

CountDownLatch是一个计数器,通过它可以控制线程执行的先后顺序。它的作用是让某个线程等待若干个其他线程执行完后再执行。使用CountDownLatch时需要指定一个计数器的值,当所有计数器都为0时,等待线程才会继续执行。

代码 

public class TestCountDown {private static CountDownLatch cl=new CountDownLatch(4);public static void main(String[] args) {Thread thread1 = new Thread(() -> {try {System.out.println("start1");Thread.sleep(4000);cl.countDown();System.out.println("end1");} catch (InterruptedException e) {throw new RuntimeException(e);}});Thread thread2 = new Thread(() -> {try {System.out.println("start2");Thread.sleep(4000);cl.countDown();System.out.println("end2");} catch (InterruptedException e) {throw new RuntimeException(e);}});Thread thread3 = new Thread(() -> {try {System.out.println("start3");Thread.sleep(4000);cl.countDown();System.out.println("end3");} catch (InterruptedException e) {throw new RuntimeException(e);}});Thread thread4 = new Thread(() -> {try {System.out.println("start4");Thread.sleep(4000);cl.countDown();System.out.println("end4");} catch (InterruptedException e) {throw new RuntimeException(e);}});thread1.start();thread2.start();thread3.start();thread4.start();try {cl.await();} catch (InterruptedException e) {throw new RuntimeException(e);}System.out.println("ok");}
}

运行结果

 CyclicBarrier

 介绍

CyclicBarrier也可以用于控制线程的顺序执行。它可以协调一组线程在某个屏障处等待并互相等待,直到所有线程都到达该屏障后再一起继续执行。CyclicBarrier可以重复使用,每次调用await()方法时,计数器的值都会减1,当计数器为0时,所有线程都会被释放。

代码 

public class TestCyclicBarrier {// 自定义工作线程private static class Worker extends Thread {private CyclicBarrier cyclicBarrier;public Worker(CyclicBarrier cyclicBarrier) {this.cyclicBarrier = cyclicBarrier;}@Overridepublic void run() {super.run();try {System.out.println(Thread.currentThread().getName() + "开始等待其他线程");cyclicBarrier.await();System.out.println(Thread.currentThread().getName() + "开始执行");// 工作线程开始处理,这里用Thread.sleep()来模拟业务处理Thread.sleep(1000);System.out.println(Thread.currentThread().getName() + "执行完毕");} catch (Exception e) {e.printStackTrace();}}}public static void main(String[] args) {int threadCount = 3;CyclicBarrier cyclicBarrier = new CyclicBarrier(threadCount);for (int i = 0; i < threadCount; i++) {System.out.println("创建工作线程" + i);Worker worker = new Worker(cyclicBarrier);worker.start();}}
}

运行结果

总结 

总结来说,CountDownLatch是控制一个线程等待多个其他线程执行完毕后再执行,而CyclicBarrier是控制多个线程相互等待,直到所有线程都到达某个屏障后再一起继续执行。 

相关文章:

CountDownLatch和CyclicBarrier

JUC&#xff08;Java.util.concurrent&#xff09;是Java 5中引入的一个并发编程库&#xff0c;它包含了许多用于多线程处理的工具类和接口。JUC主要提供了以下特性&#xff1a; 线程池&#xff1a;线程池可以提高线程的使用效率&#xff0c;避免频繁地创建和销毁线程&#xff…...

云原生正在重塑软件的整个生命周期(内附资料)

随着企业数字化转型进程的发展&#xff0c;企业面临着新旧商业形态的剧变&#xff0c;颠覆和重构时刻都在发生。 企业需要更加快速地感知用户侧的需求变化并做出调整&#xff0c;才有可能在竞争中持续积累优势。业务的个性化、敏捷化、智能化需求日益突显&#xff0c;数字化应…...

Node.js环境配置级安装vue-cli脚手架

一、下载安装Node.js (略) 二、验证node.js并配置 1、下载安装后&#xff0c;cmd面板输入node -v查询版本、npm -v ,查看npm是否安装成功&#xff08;有版本号就行了&#xff09; 2、选择npm镜像&#xff08;npm config set registry https://registry.npm.taobao.org&…...

十七、Rust集成MQTT Client

1、信息整理 目前了解到的Rust MQTT项目有&#xff1a; bytebeamio/rumqtt 1.3k star、717 commits、Contributors 78、tokio、futures、tls、rumqttc&#xff08;client&#xff09;&#xff1a;cargo add rumqttc https://github.com/bytebeamio/rumqtt/tree/main/rumqttc ru…...

HarmonyOS ArkTS开发语言介绍(三)

1 引言 Mozilla创造了JS&#xff0c;Microsoft创建了TS&#xff0c;Huawei进一步推出了ArkTS。 从最初的基础的逻辑交互能力&#xff0c;到具备类型系统的高效工程开发能力&#xff0c;再到融合声明式UI、多维状态管理等丰富的应用开发能力&#xff0c;共同组成了相关的演进脉…...

[架构之路-247]:目标系统 - 设计方法 - 软件工程 - 结构化方法的基本思想、本质、特点以及在软件开发、在生活中的应用

目录 前言&#xff1a; 一、什么是非结构化方法 1.1 什么是非结构化方法 1.2 非结构化方法的适用场合 二、什么是结构化方法 1.1 结构化方法诞生的背景&#xff1a;软件规模发展&#xff1a;大规模、复杂系统的需要 1.2 概述 1.3 主要特点与核心思想 三、结构化方法在…...

大模型的交互能力

摘要&#xff1a; 基础大模型显示出明显的潜力&#xff0c;可以改变AI系统的开发人员和用户体验&#xff1a;基础模型降低了原型设计和构建AI应用程序的难度阈值&#xff0c;因为它们在适应方面的样本效率&#xff0c;并提高了新用户交互的上限&#xff0c;因为它们的多模式和生…...

80%测试员被骗,关于jmeter 的一个弥天大谎!

jmeter是目前大家都喜欢用的一款性能测试工具&#xff0c;因为它小巧、简单易上手&#xff0c;所以很多人都愿意用它来做接口测试或者性能测试&#xff0c;因此&#xff0c;在目前企业中&#xff0c;使用各个jmeter的版本都有&#xff0c;其中以jmeter3.x、4.x的应该居多。 但是…...

Git——感谢尚硅谷官方文档

Git——尚硅谷学习笔记 第1章 Git 概述1.1 何为版本控制1.2 为什么需要版本控制1.3 版本控制工具1.4 Git 简史1.5 Git 工作机制1.6 Git 和代码托管中心 第2章 Git 安装第 3 章 Git 常用命令3.1 设置用户签名3.2 初始化本地库3.3 查看本地库状态3.4 添加暂存区3.4.1 将工作区的文…...

Java WebSocket框架

引言 随着互联网和移动互联网的迅猛发展&#xff0c;实时通信成为了应用程序的一项重要能力。WebSocket作为一种在Web上实现双向通信的协议&#xff0c;极大地丰富了Web应用程序的交互方式。而在Java领域&#xff0c;也有许多优秀的WebSocket框架可供选择&#xff0c;本文将介…...

C#实现本地服务器客户端私聊通信

&#xff08;一&#xff09;需求 在游戏中我们经常能够看到玩家与玩家之间可以进行私聊&#xff0c;在QQ或微信中最基本的功能就是用户与用户之间的通信。抽象成计算机网络&#xff0c;就是两个客户端通过服务器进行私聊通信&#xff0c;两个客户端可以互相看到对方发送过来的信…...

PyTorch 之 Dataset 类入门学习

PyTorch 之 Dataset 类入门学习 Dataset 类简介 PyTorch 中的 Dataset 类是一个抽象类&#xff0c;用来表示数据集。通过继承 Dataset 类可以进行自定义数据集的格式、大小和其它属性&#xff0c;供后续使用&#xff1b; 可以看到官方封装好的数据集也是直接或间接的继承自 …...

Java update scheduler

引言 Java 更新调度器是 Java 中的一个特性&#xff0c;可以自动化 Java 应用程序的更新过程。它提供了一种方便的方式来安排 Java 应用程序的更新&#xff0c;确保其与最新的功能、错误修复和安全补丁保持同步。本文将深入介绍如何使用 Java 更新调度器&#xff0c;并解释它对…...

常见树种(贵州省):006栎类

摘要&#xff1a;本专栏树种介绍图片来源于PPBC中国植物图像库&#xff08;下附网址&#xff09;&#xff0c;本文整理仅做交流学习使用&#xff0c;同时便于查找&#xff0c;如有侵权请联系删除。 图片网址&#xff1a;PPBC中国植物图像库——最大的植物分类图片库 一、麻栎 …...

拓扑排序-

有向无环图是拓扑排序 拓扑排序将图中所有的顶点排成一个线性序列&#xff0c;使得所有的有向边均从序列的前面指向后面。 拓扑排序使用深度优先搜索来实现&#xff0c;图中有环则无法进行拓扑排序 一个有向图&#xff0c;如果图中有入度为0的点&#xff0c;就把这个点删掉…...

Oracle数据库如何定位trace file位置

用一个示例来说明吧。 在导入master key时&#xff0c;出现错误&#xff1a; ADMINISTER KEY MANAGEMENTIMPORT KEYS WITH SECRET "my_secret"FROM /tmp/export.expIDENTIFIED BY keypwd5 WITH BACKUP; ADMINISTER KEY MANAGEMENT * ERROR at line 1: ORA-46655…...

电脑盘符错乱,C盘变成D盘怎么办?

在一些特殊情况下&#xff0c;磁盘盘符会出现错乱&#xff0c;C盘可能会变成D盘。那么&#xff0c;这该怎么办呢&#xff1f;下面我们就来了解一下。 通过磁盘管理更改盘符 磁盘管理是Windows自带的工具&#xff0c;它位于“计算机管理”的控制台中。管理硬盘及其所包含的卷或…...

Android WMS——客户端输入事件处理(十九)

前面的文章我们介绍了 WMS 中的输入服务的启动及事件处理,这一篇我们来看一下客户端对输入事件的处理。 一、事件初始化 事件的初始化就是在添加窗口的过程。 1、ViewRootImpl 源码位置:/frameworks/base/core/java/android/view/ViewRootImpl.java public void setView(…...

Python基础学习__测试报告

# 使用pycharm生成报告:只有在单独执行一个TestCase文件时可以生成,使用TestSuite等就不能用了 # 使用第三方的测试报告:例如:HTMLTestRunner第三方类库 #使用HTMLTestRunner这个执行对象# 1.获取第三方的测试运行类Runner模块(一个py文件),将其放在代码目录下 # 2.导包:unitte…...

bclinux aarch64 ceph 14.2.10 云主机 4节点 fio

ceph -s 由于是基于底层分布式存储的云主机&#xff0c;数据仅供参考 本地云盘性能 direct1 1M读取 IOPS134, BW134MiB/s [rootceph-client rbd]# cd / [rootceph-client /]# fio -filenamefio.bin -direct1 -iodepth 128 -thread -rwread -ioenginelibaio -bs1M -size10G -n…...

流媒体算法优化:从定点数运算到SIMD指令实战

1. 流媒体算法优化概述在实时音视频处理领域&#xff0c;性能优化始终是开发者面临的核心挑战。我曾参与过多个嵌入式流媒体项目&#xff0c;深刻体会到当处理1080p视频流或高保真音频时&#xff0c;即使是最简单的除法运算&#xff0c;如果未经优化也可能导致整个系统无法满足…...

为内部知识库问答工具集成 Taotoken 提供的多模型检索增强

为内部知识库问答工具集成 Taotoken 提供的多模型检索增强 在企业知识管理实践中&#xff0c;内部知识库问答工具是提升信息流转效率的关键。然而&#xff0c;单一模型在应对复杂、专业或需要多角度推理的查询时&#xff0c;其回答质量可能受限。通过集成 Taotoken 平台&#…...

AI执行契约:结构化协作框架,提升AI产品构建效率与确定性

1. 项目概述&#xff1a;从灵感到成品的AI驱动产品构建框架如果你和我一样&#xff0c;经常使用 Cursor、Claude 或 ChatGPT 来辅助构建产品原型或功能&#xff0c;那你一定经历过这样的场景&#xff1a;你有一个绝佳的想法&#xff0c;兴冲冲地打开 AI 对话窗口&#xff0c;开…...

为什么你的ITSM总失败?揭秘AISMM模型在200+中小企业的ROI验证数据(附首年降本37%实证)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AISMM模型在中小企业中的应用 核心价值与适配性 AISMM&#xff08;Agile Integrated Security Maturity Model&#xff09;是一种轻量级、迭代演进的安全成熟度评估框架&#xff0c;专为资源受限但亟需…...

为什么92%的知识管理项目失败?AISMM模型给出唯一可验证的4层校准机制

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;为什么92%的知识管理项目失败&#xff1f;AISMM模型给出唯一可验证的4层校准机制 知识管理项目失败的核心症结&#xff0c;不在于技术选型或内容匮乏&#xff0c;而在于缺乏可度量、可回溯、可干预的系…...

Windows微信批量消息发送终极指南:3步轻松搞定群发任务

Windows微信批量消息发送终极指南&#xff1a;3步轻松搞定群发任务 【免费下载链接】WeChat-mass-msg 微信自动发送信息&#xff0c;微信群发消息&#xff0c;Windows系统微信客户端&#xff08;PC端 项目地址: https://gitcode.com/gh_mirrors/we/WeChat-mass-msg 还在…...

告别抓狂!手把手教你用QAC分析遗留C代码项目(解决老旧UI与编译器匹配难题)

告别抓狂&#xff01;手把手教你用QAC分析遗留C代码项目&#xff08;解决老旧UI与编译器匹配难题&#xff09; 第一次打开QAC的复古界面时&#xff0c;我仿佛穿越回了Windows XP时代。那些灰暗的按钮、笨拙的对话框和令人困惑的菜单布局&#xff0c;让习惯了现代IDE的开发者瞬间…...

光伏运维工具推荐

1.绿虫&#xff1a;聚焦光伏运维数字化领域&#xff0c;核心产品为光伏运维软件及全流程管理系统&#xff0c;可实现远程智能巡检、智能告警、数据分析优化等功能&#xff0c;能提升运维效率、减少故障停机时间&#xff0c;适配多站点集中管理需求&#xff0c;已服务数百家光伏…...

创业公司AI能力建设白皮书(AISMM轻量级实施框架首次公开)

更多请点击&#xff1a; https://intelliparadigm.com 第一章&#xff1a;AISMM模型在创业公司中的应用全景图 AISMM&#xff08;Agile Intelligence Strategy Maturity Model&#xff09;是一种融合敏捷开发、数据智能与战略演进的三维成熟度框架&#xff0c;专为资源受限但决…...

APatch技术深度解析:Android内核级Root解决方案的架构揭秘

APatch技术深度解析&#xff1a;Android内核级Root解决方案的架构揭秘 【免费下载链接】APatch The patching of Android kernel and Android system 项目地址: https://gitcode.com/gh_mirrors/ap/APatch 在Android系统权限管理的演进历程中&#xff0c;开发者们一直在…...