← 返回并发与锁

🔐 锁对比

synchronized vs ReentrantLock + 锁升级原理

维度synchronizedReentrantLock
层级JVM 关键字API 层(AQS)
释放自动(出代码块)手动 unlock(finally!)
可中断✅ lockInterruptibly
超时✅ tryLock(timeout)
公平非公平可选公平/非公平
多Condition✅ 精准唤醒
选型简单同步用这个需要高级特性用这个
// synchronized:简单 synchronized (lock) { // 临界区 } // ReentrantLock:灵活 lock.lock(); try { // 临界区 } finally { lock.unlock(); // 必须 finally! } // tryLock 超时(防死锁) if (lock.tryLock(3, TimeUnit.SECONDS)) { try { /* 临界区 */ } finally { lock.unlock(); } }
synchronized 锁升级(JVM 自动优化):
无锁 → ② 偏向锁(只有一个线程用,记线程id) → ③ 轻量锁(多线程但无竞争,自旋CAS) → ④ 重量锁(激烈竞争,OS互斥量)
JVM 自动升级,不需要手动干预。大部分场景 synchronized 性能已经够好。
并发与锁 · 锁对比 · 全栈资料库