首页 > 编程语言 >java 常用的辅助类:CountDownLatch,CyclicBarrier,Semaphore

java 常用的辅助类:CountDownLatch,CyclicBarrier,Semaphore

时间:2024-06-07 16:34:48浏览次数:25  
标签:java CountDownLatch 线程 Semaphore new CyclicBarrier out

java 常用的辅助类:
1.CountDownLatch减法计数器
2.CyclicBarrier加法计数器
3.Semaphore 同一时刻只允许固定(3)个线程执行,完成后另外固定(3)个线程再继续执行

1.CountDownLatch:减法计数器.等待所有的执行完成
CountDownLatch countDownLatch = new CountDownLatch(5);//减法计数器
for (int i = 0; i < 5; i++) {
new Thread(()->{
System.out.println(Thread.currentThread().getName()+"go out");
countDownLatch.countDown(); //减1
},"a").start();
}

countDownLatch.await(); //等待所有的执行完成
System.out.println("close door");//最后执行

2.CyclicBarrier加法计数器:等待直到7个线程执行完成
CyclicBarrier cyclicBarrier = new CyclicBarrier(7,()->{
System.out.println("召唤神龙成功");
});

for (int i = 0; i < 7; i++) {
final int tem=i;
new Thread(()->{
System.out.println(Thread.currentThread().getName()+"shouji" +tem+"ge longzhu");
try {
cyclicBarrier.await();
} catch (InterruptedException e) {
throw new RuntimeException(e);
} catch (BrokenBarrierException e) {
throw new RuntimeException(e);
}
}).start();
}

3.Semaphore 同一时刻只允许3个线程执行,完成后另外3个线程再继续执行
// 线程数量:停车位有3个,开始停车3俩,等待1秒后释放,另外3个停车
Semaphore semaphore = new Semaphore(3);
for (int i = 0; i < 10; i++) {
new Thread(()->{
try {
semaphore.acquire();//抢到线程 若已满则等待
System.out.println("抢到线程");
} catch (InterruptedException e) {
throw new RuntimeException(e);
}
try {
TimeUnit.SECONDS.sleep(1);
} catch (InterruptedException e) {
throw new RuntimeException(e);
}finally {
semaphore.release(); //释放
}
},String.valueOf(i)).start();
}

标签:java,CountDownLatch,线程,Semaphore,new,CyclicBarrier,out
From: https://www.cnblogs.com/chenshaojun2008/p/18237436

相关文章

  • 2024.06 java知识点
     1.对象内存图2.基本数据类型与引用数据类型 ......
  • 在Java、Java Web中放置图片、视频、音频、图像文件的方法
    在Java软件中放置图片,通常涉及将图片文件(如JPEG、PNG等)作为资源包含在我们的项目中,并在代码中通过适当的方式引用这些资源。这可以通过多种方式实现,但最常见的是在Java桌面应用(如Swing或JavaFX)或Web应用(如Servlet/JSP)中。1.如何在Java中如何放置图片以下是一个在JavaSwing桌面......
  • Java开发必读,谈谈对Spring IOC与AOP的理解
    本文分享自华为云社区《超详细的Java后台开发面试题之SpringIOC与AOP》,作者:GaussDB数据库。一、前言IOC和AOP是Spring中的两个核心的概念,下面谈谈对这两个概念的理解。二、IOC(InverseofControl)控制反转,也可以称为依赖倒置。所谓依赖,从程序的角度看,就是比如A要调用B的方法......
  • 使用Redis优化Java应用的性能——高效的缓存实践
    引言:在现代应用开发中,高效的缓存策略是提升性能和用户体验的关键。Redis作为一个高性能的键值存储系统,提供了一种快速存取数据的方式,帮助Java应用处理大量动态信息而无需频繁查询数据库。什么是Redis?Redis是一个开源的键值存储系统,它支持多种类型的数据结构如字符串、哈希、......
  • 使用Apache Kafka构建可扩展的消息系统——Java的高吞吐数据处理
    引言:在处理大数据和实时事件驱动架构时,ApacheKafka展示了其强大的能力。作为一个高性能的消息队列,Kafka支持数据的发布和订阅,以及对数据流的存储,使其成为构建复杂的实时应用程序的核心组件。什么是ApacheKafka?ApacheKafka是一个开源的流处理平台,由LinkedIn开发并贡献给Ap......
  • Java微服务实战:使用Spring Boot构建高效服务
    引言在当今的软件开发实践中,微服务架构已成为推动快速开发和部署的关键因素之一。与传统的单体应用相比,微服务架构提供了更高的灵活性和可维护性。本文将探讨如何使用Java和SpringBoot来构建一个微服务应用,介绍基本概念,并通过一个简单的例子演示从零开始构建微服务的全过程。......
  • 探索Java 17:新特性解析与实战指南
    引言Java作为企业级应用开发的首选语言之一,每次更新都带来了许多期待与讨论。Java17,作为最新的长期支持版本,不仅稳定了过去的实验特性,还引入了多项改进和新功能,本文将深入探讨这些新特性,并提供实用的代码示例来展示如何在实际项目中应用这些新特性。Java17的核心新特性Jav......
  • Java使用poi导出excel折线图--以三温层车辆运输单据温度为例(含如何更改各标题大小)
    maven依赖引入<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>4.1.2</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> ......
  • JAVA开发之Idea安装
    一、下载网络搜索下载破解版二、注册三、打开idea四、在idea中打开maven项目选择pom.xml文件打开项目五、idea中设置maven一定要选择自己的maven,不然可能会编译失败六、编译完成后,就可以开始开发工作了......
  • 第十一届蓝桥杯大赛软件类决赛 Java B 组
    文章目录发现宝藏【考生须知】试题A:美丽的2试题B:扩散试题C:阶乘约数试题D:本质上升序列试题E玩具蛇试题F蓝肽子序列试题G皮亚诺曲线距离试题H:画廊试题I:补给试题J质数行者发现宝藏前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍......