Java面试题更新 2026-08-03

请解释 Java 中 Semaphore 的作用及其典型使用场景。

考察说明

考查对 Java 并发同步工具 Semaphore 的理解与应用能力。

回答思路

  1. 【回答框架 1】Semaphore 是 Java 并发包中的计数信号量,用于控制同时访问特定资源的线程数量。核心机制通过计数器管理许可,线程获取许可后才能继续执行,否则阻塞等待。
  2. 【回答框架 2】Semaphore 支持公平与非公平模式。公平模式按线程等待顺序分配许可,非公平模式则可能抢占,默认非公平。构造时可指定许可数及是否公平。
  3. 【回答框架 3】典型场景包括限流、连接池或资源池管理。例如数据库连接池限制并发连接数,或接口限流控制同时处理的请求量。
  4. 【回答框架 4】使用 acquire 获取许可,release 释放许可。需确保在 finally 中释放,避免异常导致许可泄漏。
  5. 【回答框架 5】Semaphore 与锁不同,锁只允许一个线程进入临界区,Semaphore 允许多个许可,因此更适用于资源配额控制。但需注意许可数是总体上限,不保证具体资源分配公平性。
  6. 【关键点 1】Semaphore 控制并发访问的许可数量
  7. 【关键点 2】支持公平与非公平两种模式
  8. 【关键点 3】常用场景为限流和资源池管理
  9. 【关键点 4】必须正确释放许可以避免泄漏
  10. 【关键点 5】与互斥锁区分,可允许多个线程同时访问
  11. 【易错点 1】将 Semaphore 误用于保证互斥,实际它允许多许可并发
  12. 【易错点 2】忘记在 finally 中释放许可,导致资源耗尽
  13. 【易错点 3】认为 Semaphore 能保证业务幂等,它只控制并发,幂等需额外机制