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是控制多个线程相互等待,直到所有线程都到达某个屏障后再一起继续执行。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/205796.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

为什么要学习 Linux?

为什么要学习 Linux&#xff1f; 用 Linus 本人的话来说&#xff0c;用户不需要接触到操作系统。操作系统的功能是给应用程序提供API&#xff0c;因而&#xff0c;只有开发人员才需要学习操作系统。 最近很多小伙伴找我&#xff0c;说想要一些Linux的资料&#xff0c;然后我根…

栈的生长方向不总是向下

据我了解&#xff0c;栈的生长方向向下&#xff0c;内存地址由高到低 测试 windows下&#xff1a; 符合上述情况 测试Linux下&#xff1a; 由此可见&#xff0c;栈在不同操作系统环境下&#xff0c;生长方向不总是向下

wvp分享视频访问页面

先登录查看视频 输入用户名密码登录 国标设备--点击通道 点击播放 点击复制 打开分享链接查看视频 直接在浏览器中打开 可以直接预览 原有标签退出登录 刷新分享的视频链接依然可以查看视频 iframe内嵌网页查看视频 获取iframe代码 点击复制 打开vscode&#xff0c;新建一…

一键合并多个TXT文本,将保存在TXT的快递单号进行一键合并

如果你需要处理大量的TXT文本文件&#xff0c;那么你可能会遇到需要将这些文件合并为一个文件的情况。这不仅涉及到文件的组织和管理&#xff0c;还可能涉及到文件内容的连贯性和完整性。现在&#xff0c;我们有一个强大的工具&#xff0c;可以帮助你轻松实现一键文件整理&…

不存在类型变量 A, T 的实例,使 Collector<T, A, List<T>> 符合 Supplier<R>

报错信息 原因: 不存在类型变量 A, T 的实例&#xff0c;使 Collector<T, A, List<\T>> 符合 Supplier<\R> 来源 测试Stream流的map方法&#xff0c;做算法习惯基本类型定义数组。 map方法:Stream API的一部分。允许以一种声明式的方式处理数据&#xff0c…

京东数据分析平台(京东运营数据采集):2023年10月京东白酒品牌销售排行榜

鲸参谋监测的京东平台10月份白酒市场销售数据已出炉&#xff01; 鲸参谋数据显示&#xff0c;10月份&#xff0c;京东平台上白酒的销量为340万&#xff0c;环比增长约16%&#xff0c;同比增长约37%&#xff1b;销售额为28亿&#xff0c;环比增长约20%&#xff0c;同比增长约122…

深入了解Performance API:优化网页性能的利器

在现代Web开发中&#xff0c;优化网页性能是至关重要的。用户对于加载速度和交互性能的要求越来越高&#xff0c;而Performance API作为一组用于测量和监控网页性能的JavaScript接口&#xff0c;为开发者提供了丰富的工具和信息。本文将深入探讨Performance API的各个方面&…

web自动化测试十大问题+解决方法汇总,一篇概全...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 1、启动浏览器报错…

动能方案 | 15693协议的读卡器应用 DP1363F 替代RC663

15693协议是一种高频&#xff08;13.56 MHz&#xff09;射频识别&#xff08;RFID&#xff09;协议&#xff0c;广泛满足无线识别和数据传输领域。其特点包括较远的读取范围、支持快速数据传输、与多个标签的兼容等&#xff0c;产生于不同行业有着广泛的应用&#xff0c;包括但…

Java异常处理机制

Java异常处理机制 一、异常概述与异常体系结构异常概述Error示例代码&#xff1a;Exception示例代码&#xff1a;异常体系结构Error和Exception的区别:异常分类检查异常非检查异常Why:为什么有非检查异常&#xff1f;Where:非检查异常有哪些&#xff1f;Exception异常划分运行时…

『亚马逊云科技产品测评』活动征文|通过Lightsail搭建个人笔记

提示&#xff1a;授权声明&#xff1a;本篇文章授权活动官方亚马逊云科技文章转发、改写权&#xff0c;包括不限于在 Developer Centre, 知乎&#xff0c;自媒体平台&#xff0c;第三方开发者媒体等亚马逊云科技官方渠道 文章目录 前言实践知识储备Lightsail介绍Leanote介绍实践…

18张值得收藏的高清卫星影像

这里分享的18张高清卫星影像&#xff0c;由吉林一号卫星拍摄。 原图来自长光卫星嘉宾在直播中分享的PPT演示文档。 18张高清卫星影像 吉林一号高分04A星&#xff0c;于2022年05月21日拍摄的北京紫禁城高清卫星影像。 北京紫禁城 云南昆明滇池国际会展中心高清卫星影像&…