并发JavaJava 并发锁
- 分类
- Java 并发
- 难度
- 未设置
- 来源数
- 1
- 更新时间
- 2026/03/28 21:25
答案
semaphore是一个共享式的锁,能够运行多个线程同时访问资源,并且可以控制线程数量,我们可以在构造时传入permit参数,设置同时访问的线程数,相当于将AQS中的state设置为许可证数量。在调用acquire后,会判断当前state是否还足够分配给当前线程, 如果足够则CAS设置state-1,不足则会入队阻塞等待。 一些场景问题: 1. 令牌没有重入的概念,每次acquire都需要令牌 2. semaphore的令牌不以初始化为标准,<font style="color:#DF2A3F;">每次release都会增加一个令牌</font> 使用场景: semaphore相当于普通独占锁的共享版本,用于限制获取资源的线程数量 例如n个银行窗口办理业务
相关题目(5)
Java 并发并发JavaJava 并发锁
Java 并发并发JavaJava 并发
Java 并发并发JavaJava 并发
Java 并发并发JavaJava 并发
有哪些支持并发的集合?共源 1
Java 并发并发JavaJava 并发
元信息
审核状态: active
关联来源: 1
来源面经题(0)
这道题目前没有手动沉淀的面经题来源。
来源(1)
Java八股(并发).md
knowledge_noteQuestion 108: 什么是Semaphore?
Source answer: semaphore是一个共享式的锁,能够运行多个线程同时访问资源,并且可以控制线程数量,我们可以在构造时传入permit参数,设置同时访问的线程数,相当于将AQS中的state设置为许可证数量。在调用acquire后,会判断当前state是否还足够分配给当前线程, 如果足够则CAS设置state-1,不足则会入队阻塞等待。 一些场景问题: 1. 令牌没有重入的概念,每次acquire都需要令牌 2. semaphore的令牌不以初始化为标准,<font style="color:#DF2A3F;">每次release都会增加一个令牌</font> 使用场景: semaphore相当于普通独占锁的共享版本,用于限制获取资源的线程数量 例如n个银行窗口办理业务
Reviewed answer: Semaphore是共享式同步器,用于控制同时访问资源的线程数量。它可通过permit指定许可证数量,本质上可理解为AQS的state表示可用许可证数。调用acquire时尝试减少许可证,不足则入队等待;调用release会归还并增加许可证。它不具备重入语义。