§2.2.5 AQS原理简述
考察意图:理解AQS作为JUC基石的原理深度,而非泛泛而谈"抽象队列同步器"。
回答样板:
AQS(AbstractQueuedSynchronizer)是JUC锁和同步器(ReentrantLock、CountDownLatch、Semaphore等)的基石。
核心三要素:
volatile int state——同步状态(独占模式0表示未锁,大于0表示已锁;共享模式表示剩余资源数)- CLH变体双向队列——等待获取锁的线程队列,每个节点通过CAS和前驱节点的waitStatus状态协作
- 模板方法模式——子类实现tryAcquire/tryRelease等抽象方法决定同步语义,AQS内部维护队列和状态流转
独占模式获取锁流程:tryAcquire尝试获取 → 成功则返回 → 失败则将当前线程包装成Node加入等待队列 → 在队列中自旋或阻塞等待前驱节点唤醒。
项目层面:日常使用多是读API层面(直接用ReentrantLock、CountDownLatch),没有深入到定制AQS同步器那个层面。但对AQS的CLH队列原理、state状态机有清晰理解。
陷阱提示:说"精通AQS"结果说不出CLH队列原理;泛泛而谈"抽象队列同步器"没深度。
备选话术:我日常使用线程池处理异步任务(如设备数据批量写入),对JUC核心类有实操经验。但AQS源码实现细节或无锁编程(CAS/Unsafe)不是日常写代码的层面,坦诚需要查资料。