Synchronized 与 ReentrantLock 的区别
Synchronized 与 ReentrantLock 的区别
synchronized:隐式锁,JVM 自动加锁 / 释放锁
ReentrantLock:显式锁,需要手动 lock() / unlock()
ReentrantLock 本质上是基于 AQS 实现的。
synchronized是非公平锁 然后ReentrantLock 有公平锁有非公平锁
ReentrantLock 支持中断lock.lockInterruptibly();还有超时获取锁
1 | if (lock.tryLock(1, TimeUnit.SECONDS)) { |
| synchronized | ReentrantLock | |
|---|---|---|
| 锁类型 | 隐式锁 | 显式锁 |
| 释放方式 | 自动 | 手动 |
| 公平锁 | 不支持 | 支持 |
| 可中断 | 不支持 | 支持 |
| 超时获取 | 不支持 | 支持 |
| 底层 | JVM | AQS |
ReentrantLock的使用场景
一般场景我优先使用 synchronized,代码简单且 JVM 已做了大量优化;当需要超时获取锁、可中断、公平性或多个条件队列时,我会使用 ReentrantLock,它提供了更灵活、更可控的并发能力。
https://binzi.top/2025/01/23/Synchronized%20%E4%B8%8E%20ReentrantLock%20%E7%9A%84%E5%8C%BA%E5%88%AB/
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 彬子的Blog!







