标签题目
Java 并发相关面试题
ReentrantLock 如何基于 AQS 实现可重入锁?
ReentrantLock 的核心不是自己从零管理阻塞队列,而是把获取锁、释放锁、排队、唤醒、可中断等待、条件队列等通用同步能力交给 AQS。它用 AQS 的 state 表示重入次数,用独占线程记录锁持有者,通过公平或非公平策略决定是否允许新线程插队。
AQS 是什么?
AQS 是 Java 并发包中的基础同步框架,用一个 volatile state 表示同步状态,用一个 FIFO 等待队列管理竞争失败的线程,并通过模板方法把通用排队唤醒流程和具体同步语义分离。
synchronized 和 ReentrantLock 有什么区别?
synchronized 是 JVM 层面的内置锁,语法简单,自动加锁释放;ReentrantLock 是 JUC 提供的显式锁,基于 AQS,功能更丰富。两者都可重入,都能保证互斥和可见性,但在使用方式、等待能力、公平性、条件队列和可中断性上差异明显。