Java 中的 ReentrantLock 和 synchronized 都是用于实现线程同步的机制,但它们在功能、使用方式和性能等方面存在显著差异。以下是它们的主要特征及区别:
一、基本概念
-
synchronized
是 Java 语言内置的关键字,用于方法或代码块上,自动管理锁的获取与释放。
-
ReentrantLock
是
java.util.concurrent.locks包中的一个类,属于 API 层面的显式锁,需要手动加锁(lock())和解锁(unlock())。
二、主要区别

三、注意事项
- 使用
ReentrantLock时,必须确保unlock()在finally块中调用,否则异常可能导致死锁。 synchronized在早期版本性能较差,但在 JDK 6 之后通过锁优化(偏向锁、轻量级锁、自旋锁等)大幅改善。ReentrantLock是可重入的,和synchronized一样,同一个线程可以多次获取同一把锁。