当前位置: 首页 > 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.  结果符合预期。

相关文章:

  • 题目 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):原理、推导与实现
  • 通过付费网站做lead/网站权重优化
  • wordpress dns ip/seoul
  • 教做月嫂的网站有吗/品牌推广方案思维导图
  • 邯郸移动网站建设公司/seo研究
  • 网站访问量查询工具/上海网络推广
  • wordpress 调用别名/专业网站优化排名