前面已经了解到了,可重入锁加锁,看门狗以及锁的互斥阻塞。
当锁加锁成功之后,锁是如何释放的?
源码入口:RedissonLock#unlock
在解锁时会获取当前线程的id。
一路往里跟,直接来到 RedissonLock#unlockInnerAsync
:
分析一下 lua 脚本的内容:
主动释放锁这块考虑的不仅仅是对 key 进行处理,因为可能存在重入锁,所以会先对 redis key 对应的 hash value 进行递减,相当于减去重入次数。
相比较主动释放,自动释放就比较容易理解了。
Redisson 锁的释放分为两种:
- <End /> -