ReentrantLock
是 Java 并发包 (java.util.concurrent.locks
) 中的一个重要锁实现,提供了比 synchronized
关键字更灵活、更强大的锁机制。
一、核心特性
1. 可重入性(Reentrant)
-
同一线程可以重复获取同一把锁,避免死锁。
-
锁内部维护一个计数器,每次获取锁时计数器加1,释放时减1。只有当计数器归零时,锁才会完全释放。
2. 公平性(Fairness)
-
公平锁:按照线程请求锁的顺序(FIFO)分配锁。
-
非公平锁:允许线程“插队”获取锁,可能提高吞吐量。
-
默认构造非公平锁,可通过参数指定公平性:
3. 锁中断(Interruptible Locking)
-
线程在等待锁的过程中可响应中断(
lockInterruptibly()
)。 -
避免因锁长时间等待导致的线程阻塞。