JUC 之CountDownLatch工具类

news/2024/11/26 11:26:43/

目录

什么是CountDownLatch?

一个示例看懂

思考这与join有什么1区别?


什么是CountDownLatch?

CountDownLatch是Java中的一个并发工具类,用于控制多个线程同时执行某个操作,在达到某个条件前等待,达到条件后再同时执行操作。

CountDownLatch中的计数器初始化为一个正整数,每当一个线程完成了自己的任务后,计数器的值就减1,直到计数器的值为0时,所有等待的线程才会被唤醒同时开始执行。

一个示例看懂

import java.util.concurrent.CountDownLatch;public class Example {public static void main(String[] args) {final CountDownLatch latch = new CountDownLatch(2);new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(1000);System.out.println("Thread 1 completed.");latch.countDown();} catch (InterruptedException e) {e.printStackTrace();}}}).start();new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(2000);System.out.println("Thread 2 completed.");latch.countDown();} catch (InterruptedException e) {e.printStackTrace();}}}).start();try {latch.await();System.out.println("All threads completed.");} catch (InterruptedException e) {e.printStackTrace();}}
}

        在这个示例中,我们创建了一个CountDownLatch对象,并将其初始化为2。然后我们创建了两个线程,在每个线程中都执行了一些操作,在每个线程的内部调用了latch.countDown()方法来减少计数器的值。

        最后,我们在主线程中调用latch.await()方法来等待计数器的值变为0,这样所有的线程就可以同时执行其他的操作了。

最后输出"All threads completed."。

思考这与join有什么1区别?

join的工作原理是:不停检查thread是否存活,如果存活则让当前线程永远wait,直到thread线程终止,线程的this.notifyAll 就会被调用。

显然join使用的场景肯定比CountDownLatch简单,也就是说CountDownLatch更加的强大。

具体可看以下,不再赘述。

CountDownLatch理解一:与join的区别_countdownlatch和join_逐兔郎的博客-CSDN博客


http://www.ppmy.cn/news/85358.html

相关文章

MySQL — SQL 优化

文章目录 SQL 优化一、插入数据二、主键优化2.1 数据组织方式2.2 页分裂2.3 页合并2.4 主键设计原则 三、 Order by 优化3.0 排序方式讲解3.1 升序/降序联合索引结构图示3.2 总结 四、Group by优化五、limit优化六、 count优化七、update优化七、update优化 SQL 优化 一、插入…

全网最新最全面的jmeter性能测试/性能用例模板

性能测试是通过自动化的测试工具模拟多种正常、峰值以及异常负载条件来对系统的各项性能指标进行测试。 性能测试主要包括5个方面: 预期目标用户测试:预期目标用户测试是指系统在需求分析和设计阶段都会提出一些性能指标,针对这些性能指标测…

mybatisPlus注解配置雪花id

好的&#xff0c;那我就结合你提供的代码为例&#xff0c;来详细讲解一下使用 MyBatis-Plus 的注解指定 ID 生成策略的方法。 引入依赖 在你的项目中&#xff0c;需要引入 MyBatis-Plus 的依赖以及对应的数据库驱动和连接池依赖&#xff0c;例如&#xff1a; <!-- MyBati…

1.Set 和 WeakSet用法

//实用操作 var arr [1, 1, 1, 2, 2, 2, 3, 33, 3,] var a new Set(arr) console.log(Array.from(arr));//(9) [1, 1, 1, 2, 2, 2, 3, 33, 3] //添加 var s new Set([1, 2, 3]); //或者用add() s.add(a); s.add(b); s.add(c); console.log(s);//Set(6) {1, 2, 3, a, b, …} …

Linux之firewalld防火墙基础

目录 一、firewalld的简介 二、iptables与firewalld的联系与区别 1&#xff09;iptables与firewalld的联系 netfilter Firewalld/iptables 2&#xff09;iptables与firewalld的区别 区别一&#xff1a; 区别二&#xff1a; 区别三&#xff1a; 三、firewalld区域 1…

1688商品详细信息价格SKU接口

随着新零售时代的到来&#xff0c;越来越多的企业开始关注电商平台&#xff0c;其中1688平台作为国内重要的B2B电商平台之一&#xff0c;对于企业发展、产品销售等方面有着重要的价值。在使用1688平台出售商品时&#xff0c;如何优化商品详情页、提高搜索排名、增加商品曝光度&…

go sync包

官方文档&#xff1a;https://pkg.go.dev/sync 临界区 临界区(critical section)是指包含有共享数据的一段代码&#xff0c;这些代码可能被多个线程访问 或修改。临界区的存在就是为了保证当有一个线程在临界区内执行的时候&#xff0c;不能有其他任何线程被允许在临界区执行…

SID 2023观察:显示行业的新潮向是什么?

作为全球最大的显示行业盛会&#xff0c;每年的SID国际显示周都会成为外界关注的焦点&#xff0c;并被赞誉为显示行业的“奥斯卡”。 今年的SID 2023自然也不例外&#xff0c;众多显示“老将”无一缺席。特别是迈入而立之年的京东方&#xff0c;可以说是第61届SID上最耀眼的存…