模型服务连接失败
并发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 并发
Java 并发并发JavaJava 并发

元信息

审核状态: active
关联来源: 1

来源面经题(0)

这道题目前没有手动沉淀的面经题来源。

来源(1)

Java八股(并发).md

knowledge_note
Question 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会归还并增加许可证。它不具备重入语义。