JAVA面试-并发篇 06-ReentrantLock如何实现公平锁的以及可重入吗
·
ReentrantLock公平锁实现与可重入特性
一、文章概述
ReentrantLock是JUC并发包下基于AQS实现的独占锁,支持可重入,并提供公平锁、非公平锁两种模式。本文讲解可重入实现原理,明确公平锁获取失败后的入队规则,清晰对比两种锁的核心差异。
二、核心特性
| 特性 | 说明 |
|---|---|
| 可重入性 | 同一线程可多次获取锁,通过state计数实现 |
| 公平锁 | 严格遵循队列顺序,无抢占、无重试 |
| 非公平锁 | 支持直接抢占锁,性能更高 |
三、可重入性实现原理
依托AQS的state变量实现可重入:
- 线程重入锁,
state+1 - 释放锁,
state-1 state=0代表锁完全释放
四、公平锁获取流程
五、非公平锁获取流程
六、核心规则
- 公平锁:CAS获取失败后,不重试、不插队,直接加入AQS队列队尾,严格遵守FIFO先来先服务
- 非公平锁:CAS抢占失败后,同样加入队列队尾,但获取锁时允许直接抢占
总结
ReentrantLock通过state实现可重入;公平锁与非公平锁获取失败后,统一加入AQS队列队尾。公平锁全程禁止插队,保证执行顺序;非公平锁允许抢占,提升吞吐量,可按需选择。
更多推荐

所有评论(0)