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

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://www.xdnf.cn/news/10672.html

相关文章:

  • 线程安全与线程池
  • Artificial Analysis2025年Q1人工智能发展六大趋势总结
  • PCIe-Error Detection(一)
  • dify应用探索
  • 全文索引详解及适用场景分析
  • NLP学习路线图(十七):主题模型(LDA)
  • AI Agent企业级生产应用全解析
  • Greyctf 2025 writeup
  • 【JAVA】注解+元注解+自定义注解(万字详解)
  • 【位运算】只出现⼀次的数字 II(medium)
  • 1. 前言与安装pytorch、d2l
  • 【Java学习笔记】异常
  • Chapter 10 Inductive DC–DC Converters
  • MCP (模型上下文协议):AI界的“USB-C”标准,开启大模型应用新纪元
  • C语言基础(10)【二维数组 字符数组 字符串相关操作】
  • 代码随想录算法训练营第十一天 | 150. 逆波兰表达式求值、239. 滑动窗口最大值、347.前 K 个高频元素、栈与队列总结
  • 光伏功率预测 | LSTM多变量单步光伏功率预测(Matlab完整源码和数据)
  • 用“照片放大/缩小”来通俗理解多尺度
  • QT入门学习(二)---继承关系、访问控制和变量定义
  • Dockerfile常用指令介绍
  • 【Redis】Set 集合
  • Python列表、字典、元组、集合
  • 推荐一款使用html开发桌面应用的工具——mixone
  • 39. 组合总和【 力扣(LeetCode) 】
  • 从万物互联到万体智联:论智能体互联网带来的产业革命
  • 可视化大屏如何制作
  • SQL快速入门【转自牛客网】
  • 强人工智能 vs 弱人工智能:本质区别与未来展望
  • CppCon 2014 学习:Defensive Programming Done Right.
  • 嵌入式Linux 期末复习指南(下)