关于内核态:synchronized和ReentrantLock
关于内核态:synchronized和ReentrantLock
对比:
| 特性 | synchronized |
ReentrantLock |
|---|---|---|
| 默认状态 | 偏向锁(用户态) | CAS(用户态) |
| 低竞争 | 轻量级锁(用户态) | 自旋(用户态) |
| 高竞争 | 重量级锁(内核态) | park/unpark(可能涉及内核) |
| 锁管理 | JVM 自动管理 | 手动控制 |
| 灵活性 | 有限 | 丰富 |
关键结论:
- ✅
synchronized在无竞争或低竞争时是纯用户态的 - ✅
ReentrantLock在获取锁时是用户态的,但park()可能涉及内核 - ❌ 不能说
synchronized一定需要内核态切换 - ❌ 不能说
ReentrantLock完全不需要内核态支持
现代 synchronized 经过大量优化,在大多数场景下性能与 ReentrantLock 相当甚至更好! 选择哪个应该基于功能需求而非性能偏见。
浙公网安备 33010602011771号