ReentrantLock默认实现的是公平还是非公平锁?

ReentrantLock 默认实现的是非公平锁

1. 默认情况下

在 Java 的 ReentrantLock 中,如果你使用无参构造方法 new ReentrantLock(),它会创建一个非公平锁。具体来说,非公平锁的特性允许后续请求锁的线程在当前线程释放锁时插队。

2. 构造方法

ReentrantLock 提供了一个带布尔值参数的构造方法:

public ReentrantLock(boolean fair) {
    sync = fair ? new FairSync() : new NonfairSync();
}
  • 如果传入 true,会创建一个公平锁;
  • 如果传入 false(这是默认值),则创建一个非公平锁。

3. 公平锁与非公平锁的对比

  • 公平锁

    • 按照请求的顺序获取锁,确保线程的公平性,避免线程饥饿。
    • 可能会引入更高的上下文切换和较低的吞吐量。
  • 非公平锁

    • 当前线程可以在锁被释放时直接尝试获取锁,未必按照顺序。
    • 在高并发场景下可以提供更好的性能和资源利用率,但可能导致某些线程长时间等待(饥饿现象)。

总结

ReentrantLock 默认实现的是非公平锁,若需要公平锁,可以通过调用构造函数并传入 true 来实现。

如果你有其他问题或需要进一步探讨,请随时在评论区留言!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

java奋斗者

听说打赏我的人再也不会有BUG

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值