Redisson(2-2)分布式锁实现对比 VS Java的ReentrantLock之带超时时间的tryLock

本文对比了Redisson分布式锁与Java ReentrantLock在实现带超时时间的tryLock上的差异。Redisson利用Redis的订阅功能,避免了轮询带来的压力,通过信号量实现线程的等待与唤醒。在等待锁的超时时间范围内,如果锁被释放,线程将进入锁的竞争阶段。同时,Redisson在虚拟机内使用共享锁减少对Redis的压力,并确保公平竞争。
摘要由CSDN通过智能技术生成

Redisson实现了一整套JDK中ReentrantLock的功能,这里对比一下实现的差异和核心的思想。

unfair模式的带超时时间的tryLock(超时时间)

ReentrantLock

这里上来会直接先试下能不能try成功,如果不成功,进入等待并开始竞争等逻辑。

整个锁的核心是通过LockSupport的park方法来实现的,这是调用底层UNSAFE的park方法来实现的。如果在被等待获取的锁释放的时候,该线程会重新被唤醒,然后和其它线程一起竞争,如果没有竞争成功,那么继续park,循环往复,直到获取到锁或者等待超时(这里park的时间是当前要获取锁的线程等待获取锁的剩余时间,当前线程要么因为锁释放被唤醒,要么等到超时)。

这里有个小细节是,如果剩余的等待时间小于spinForTimeoutThreshold这个值,那么就不会再park然后等待唤醒了。这是为了防止park然后唤醒这种线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值