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

java Semaphore‌

Java Semaphore 用于控制同时访问特定资源的线程数量,通过管理一组“许可”(permits)实现并发限制。

模拟6人上厕所,但只有两个坑位,测试代码:

import java.util.concurrent.Semaphore;// 假设厕所只有俩个坑位,模拟6人上厕所private static void testSemaphore() {int count = 2; // 坑位数量// 创建Semaphore(2个许可证, 同一时刻最多2个线程能获取到许可),// 许可证就相当于需要竞争的资源(这里是厕所坑位资源)Semaphore semaphore = new Semaphore(count);  // 6人竞争资源, 假设每个线程为一个等待上厕所的人。String[] people = {"田伯光", "灭绝师太", "陆小凤", "周伯通", "赵钱孙", "黄老邪"}; // 等待上厕所的人for (int i = 0; i < people.length; i++) {int finalI = i;new Thread(() -> {try {System.out.println(people[finalI] + " 等待上厕所 " + getNowTimeStr());semaphore.acquire(); // 获取1个许可 ,也可以这样调用:semaphore.acquire(1)System.out.println(people[finalI] + " 占用厕所1个坑位 " + getNowTimeStr());Thread.sleep(1000); // 模拟资源使用(即蹲坑的过程)} catch (InterruptedException e) {e.printStackTrace();} finally {System.out.println(people[finalI] + " 爽完了,释放厕所1个坑位 " + getNowTimeStr());semaphore.release(); // 释放许可}}).start();}}private static String getNowTimeStr() {SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return sdf.format(new Date());}

打印:

ok.  结果符合预期。


文章转载自:

http://haf4TvHr.yjqkk.cn
http://0kAXqVS0.yjqkk.cn
http://XNK10XVx.yjqkk.cn
http://4CiGkPeL.yjqkk.cn
http://En9B80xc.yjqkk.cn
http://JjxpJf8I.yjqkk.cn
http://0g1ZOWoE.yjqkk.cn
http://18nAmTBj.yjqkk.cn
http://92AIeYGw.yjqkk.cn
http://b7UF5NZg.yjqkk.cn
http://qLXbmZRd.yjqkk.cn
http://DLiIRTuw.yjqkk.cn
http://uwXdNVdB.yjqkk.cn
http://WqU3GzWX.yjqkk.cn
http://JyIGkczr.yjqkk.cn
http://1H07YyK5.yjqkk.cn
http://AG4TWg54.yjqkk.cn
http://6ARoO2tV.yjqkk.cn
http://Q0a8vUlU.yjqkk.cn
http://rRqXDlWH.yjqkk.cn
http://SxTgfT9l.yjqkk.cn
http://pK4Ig6To.yjqkk.cn
http://acczQB9X.yjqkk.cn
http://0kdpZWHW.yjqkk.cn
http://ck2Tf3xn.yjqkk.cn
http://6OWG9ycE.yjqkk.cn
http://ICojKC27.yjqkk.cn
http://KkQcaz6n.yjqkk.cn
http://0TT5j5R3.yjqkk.cn
http://sEbZgNFT.yjqkk.cn
http://www.dtcms.com/a/227156.html

相关文章:

  • 题目 3225: 蓝桥杯2024年第十五届省赛真题-回文字符串
  • 数据库MySQL集群MGR
  • 【Block总结】LRSA,局部区域自注意力|即插即用
  • 爬虫的几种方式(使用什么技术来进行一个爬取数据)
  • Android第十二次面试GetX库渲染机制
  • ThinkPrune:在RL中引入长度限制,在保持性能一致或略有提升下,显著提升推理效率
  • vue router详解和用法
  • 极客时间:用 FAISS、LangChain 和 Google Colab 模拟 LLM 的短期与长期记忆
  • ubuntu安装devkitPro
  • day44 python 训练CNN网络并使用Grad-CAM可视化
  • c++类和对象-继承
  • Spring框架学习day6--事务管理
  • DeepSeek 赋能车路协同:智能交通的破局与重构
  • Fisher准则例题——给定类内散度矩阵和类样本均值
  • Linux——计算机网络基础
  • 实现Cursor + Pycharm 交互
  • 基于FPGA的VGA显示文字和动态数字基础例程,进而动态显示数据,类似温湿度等
  • 高等数学笔记 第八章——向量代数与空间解析几何2
  • STL解析——list的使用
  • 深入解析支撑向量机(SVM):原理、推导与实现
  • 深度学习|pytorch基本运算-hadamard积、点积和矩阵乘法
  • 【软件测试】测试框架(unittest/pytest)
  • StarRocks部署方案详解:从单机到分布式集群
  • 数据库系统概论(十三)详细讲解SQL中数据更新(插入,修改与更新)
  • SpringBoot-配置Spring MVC
  • 掌握HttpClient技术:从基础到实战(Apache)
  • 【Redis】Set 集合
  • AI Agent企业级生产应用全解析
  • Flask中secret_key设置解析
  • 振动分析师(ISO18436-2)四级能力矩阵 - 简介