线程同步辅助类的使用

devtools/2025/2/27 8:24:48/

一、countDownLatch(减法)

public class CountDownLatchDemo {public static void main(String[] args) throws InterruptedException {CountDownLatch countDownLatch = new CountDownLatch(6);for (int i = 0; i < 6; i++) {new Thread(()->{System.out.println(Thread.currentThread().getName()+"OUT_OF");countDownLatch.countDown();}).start();}countDownLatch.await();System.out.println("Close Door");}
}

1、可以理解成countDown()一次就减一 直到0结束

2、countDownLatch.await();可以设置超时时间 如:

countDownLatch.await(8, TimeUnit.SECONDS);

超时会抛出异常

二、CyclicBarrier(加法)

public class CyclicBarrierDemo {public static void main(String[] args) throws BrokenBarrierException, InterruptedException {//设置阻碍 达到数量 执行CyclicBarrier c = new CyclicBarrier(7, () -> {System.out.println("召唤神龙成功");});for (int i = 0; i < 3; i++) {final int temp=i;new Thread(()->{System.out.println(Thread.currentThread().getName()+"-----------------"+"收集第"+temp+"龙珠");try {c.await(4, TimeUnit.SECONDS);} catch (InterruptedException e) {} catch (Exception e) {throw new RuntimeException(e);};System.out.println("第"+temp+"龙珠");}).start();}}
}

1、调用一次await() 就加1 到达指定数量结束

2、c.await();也可以设置超时时间

三、Semaphore

public class SemaphoreDemo {public static void main(String[] args) {//线程数量Semaphore semaphore = new Semaphore(3);for (int s = 0; s < 6; s++) {final int temp=s;new Thread(()->{try {semaphore.acquire();System.out.println(Thread.currentThread().getName()+"获取第"+temp+"停车位");TimeUnit.SECONDS.sleep(3);System.out.println(Thread.currentThread().getName()+"释放第"+temp+"停车位");} catch (InterruptedException e) {throw new RuntimeException(e);} finally {semaphore.release();}},String.valueOf(s)).start();}}
}

1、必须使用semaphore.acquire(); 否则线程数量不会被限制 和普通线程一样

2、如果不执行semaphore.release(); 线程永远占用一个数量

3、最多指定数量的线程 执行完释放后 进入新的线程

和线程池区别:

线程池是线程不变 这里是位置不变 线程改变


http://www.ppmy.cn/devtools/163005.html

相关文章

Docker教程(喂饭级!)

如果你有跨平台开发的需求&#xff0c;或者对每次在新机器上部署项目感到头疼&#xff0c;那么 Docker 是你的理想选择&#xff01;Docker 通过容器化技术将应用程序与其运行环境隔离&#xff0c;实现快速部署和跨平台支持&#xff0c;极大地简化了开发和部署流程。本文详细介绍…

月之暗面改进并开源了 Muon 优化算法,对行业有哪些影响?

互联网各领域资料分享专区(不定期更新): Sheet 正文 月之暗面团队改进并开源的 Muon 优化算法 在深度学习和大模型训练领域引发了广泛关注,其核心创新在于显著降低算力需求(相比 AdamW 减少 48% 的 FLOPs)并提升训练效率,同时通过开源推动技术生态的共建。 1. 显著降低大…

TCP/IP 5层协议簇:物理层

目录 1. 物理层&#xff08;physical layer&#xff09; 2. 网线/双绞线 1. 物理层&#xff08;physical layer&#xff09; 工作设备&#xff1a;网线、光纤、空气 传输的东西是比特bit 基本单位如下&#xff1a;数字信号 信号&#xff1a;【模拟信号&#xff08;放大器&a…

Linux: 已占用接口

Linux: 已占用接口 1. netstat&#xff08;适用于旧系统&#xff09;1.1 书中对该命令的介绍 2. ss&#xff08;适用于新系统&#xff0c;替代 netstat&#xff09;3. lsof&#xff08;查看详细进程信息&#xff09;4. fuser&#xff08;快速查找占用端口的进程&#xff09;5. …

Android 10.0 Settings中系统菜单去掉备份二级菜单

1.前言 在10.0的系统rom定制化开发中,在系统Settings开发过程中,会发现在settings中的系统菜单中需要去掉 备份这个菜单,接下来就需要分析下系统菜单中的备份菜单的相关功能,然后实现去掉备份菜单的功能 2.Settings中系统菜单去掉备份二级菜单的核心类 packages/apps/Se…

HBase常用的Filter过滤器操作

HBase常用的Filter过滤器操作_hbase filter-CSDN博客 HBase过滤器种类很多&#xff0c;我们选择8种常用的过滤器进行介绍。为了获得更好的示例效果&#xff0c;先利用HBase Shell新建students表格&#xff0c;并往表格中进行写入多行数据。 一、数据准备工作 &#xff08;1&am…

Claude-3.7-Sonnet 的混合推理:解锁 AI 的双重潜力

引言 随着人工智能技术的快速发展&#xff0c;大型语言模型&#xff08;LLM&#xff09;的能力不断提升。2025 年 2 月&#xff0c;Anthropic 推出了 claude-3.7-sonnet&#xff0c;这款模型首次引入了“混合推理”能力&#xff0c;成为其最显著的创新点之一。对于普通用户和开…

DeepSeek学习教程 从入门到精通pdf下载:快速上手 DeepSeek

下载链接&#xff1a;DeepSeek从入门到精通(清华大学).pdf 链接: https://pan.baidu.com/s/1Ym0-_x9CrFHFld9UiOdA5A 提取码: 2ebc 一、DeepSeek 简介 DeepSeek 是一款由中国团队开发的高性能大语言模型&#xff0c;具备强大的推理能力和对中文的深刻理解。它广泛应用于智能办…