ReentrantLock
默认实现的是非公平锁。
1. 默认情况下
在 Java 的 ReentrantLock
中,如果你使用无参构造方法 new ReentrantLock()
,它会创建一个非公平锁。具体来说,非公平锁的特性允许后续请求锁的线程在当前线程释放锁时插队。
2. 构造方法
ReentrantLock
提供了一个带布尔值参数的构造方法:
public ReentrantLock(boolean fair) {
sync = fair ? new FairSync() : new NonfairSync();
}
- 如果传入
true
,会创建一个公平锁; - 如果传入
false
(这是默认值),则创建一个非公平锁。
3. 公平锁与非公平锁的对比
-
公平锁:
- 按照请求的顺序获取锁,确保线程的公平性,避免线程饥饿。
- 可能会引入更高的上下文切换和较低的吞吐量。
-
非公平锁:
- 当前线程可以在锁被释放时直接尝试获取锁,未必按照顺序。
- 在高并发场景下可以提供更好的性能和资源利用率,但可能导致某些线程长时间等待(饥饿现象)。
总结
ReentrantLock
默认实现的是非公平锁,若需要公平锁,可以通过调用构造函数并传入 true
来实现。
如果你有其他问题或需要进一步探讨,请随时在评论区留言!