星海

并发 · 单选题 · 第 16 题

Java 后端开发面试 · 第 16 题

关于 AQS(AbstractQueuedSynchronizer),下列说法正确的是?

  1. A内部基于 synchronized 和 wait/notify 实现,只是在它们外面做了一层简单的封装
  2. B用一个 volatile 的 int 状态 state 表示同步状态,并用 FIFO 队列管理等待线程
  3. C每把锁都直接对应一个操作系统信号量,加锁和解锁都要进行系统调用
  4. D只能用来实现独占锁,共享模式的同步器无法基于 AQS 来实现

答案

B B. 用一个 volatile 的 int 状态 state 表示同步状态,并用 FIFO 队列管理等待线程

解析

AQS 通过 CAS 修改 state 来抢锁,失败的线程包装成节点进入队列(CLH 队列的变体),再用 LockSupport.park 挂起。ReentrantLock 用 state 记录重入次数,Semaphore 用它表示许可数,CountDownLatch 用它表示计数,后两者都是共享模式。没有竞争时只做 CAS,不进入内核。

在线刷这套题:即时判分、错题本、闪卡复习,不用登录就能练。