synchronized 和 ReentrantLock 的区别?

Java 并发面试题发布于

一、底层实现

  • synchronized:JVM 级,字节码指令 monitorenter/monitorexit,依赖对象头的 Mark Word。
  • ReentrantLock:JDK 级,基于 AQS(AbstractQueuedSynchronizer)实现。

二、对比

维度 synchronized ReentrantLock
实现 JVM JDK
释放 自动 需手动 unlock(finally)
公平锁 非公平 可配置公平/非公平
可中断 不可 lockInterruptibly
超时 不支持 tryLock(timeout)
条件变量 一个 多个 Condition

三、锁升级(synchronized)

无锁 → 偏向锁 → 轻量级锁 → 重量级锁,只能升级不能降级。

四、使用建议

简单同步用 synchronized(不易忘记解锁);需要公平、可中断、超时、多条件时用 ReentrantLock。