一、基本特性对比
特性 | synchronized | ReentrantLock |
锁的实现机制 | JVM 内置关键字,通过监视器实现 | JDK 提供的 API 类( |
锁的获取方式 | 隐式获取和释放(进入/退出同步代码块或方法自动获取/释放) | 显式调用 |
可重入性 | 支持 | 支持 |
锁的类型 | 非公平锁(默认) | 可选择公平锁或非公平锁(构造函数指定) |
条件变量 | 通过 | 通过 |
中断响应 | 不支持中断等待 | 支持 |
超时机制 | 不支持 | 支持 |
锁的绑定 | 与代码块或方法绑定 | 可跨方法绑定,更灵活 |
性能 | JDK 1.6 后优化,性能接近 | 在高并发竞争下表现更稳定 |
二、详细区别分析
1. 实现层面
- synchronized:
- Java 关键字,由 JVM 底层实现(通过
monitorenter/monitorexit字节码指令)。 - 锁信息记录在对象头的 Mark Word 中。
- Java 关键字,由 JVM 底层实现(通过
- ReentrantLock:
- 基于
AbstractQueuedSynchronizer(AQS)实现的显式锁。 - 通过 CAS(Compare-And-Swap)和队列管理线程竞争。
- 基于
2. 使用方式
{
}
{
() {
}
}
();
{
lock.lock();
{
} {
lock.unlock();
}
}


