Redisson的Lock和TryLock的区别

1️⃣ lock 方法

1.1 无参数版本

  • 行为:抢到锁后,线程会一直占有该锁

  • 线程挂掉:看门狗会持续续期锁

  • 风险:如果看门狗持续续期且线程未释放锁,其他线程阻塞等待 → 可能出现死锁

1.2 带参数版本 lock(leaseTime, unit)

  • 行为 :抢到锁后,锁会在 leaseTime 到期后自动释放

  • 线程挂掉 :锁仍会在 leaseTime 时间后释放,不依赖看门狗

  • 优势:避免线程异常或执行过长导致锁无限占用,降低死锁风险


2️⃣ tryLock 方法

2.1 两参数版本 tryLock(waitTime, unit)

  • 行为 :尝试获取锁,最多等待 waitTime(例如 3 秒)

  • 获取锁成功

    • 锁的过期时间由 Redisson 看门狗自动延长

    • 直到手动释放锁

  • 获取锁失败

    • 等待时间到仍未获取 → 返回 false

    • 不会继续抢锁

2.2 三参数版本 tryLock(waitTime, leaseTime, unit)

  • waitTime:最多等待多久尝试获取锁(例如 3 秒)

  • leaseTime:锁的自动释放时间,不依赖看门狗

  • 行为

    • 如果 3 秒内获取到锁 → 返回 true,锁会在 leaseTime 到期后自动释放

    • 超过 3 秒仍未获取锁 → 返回 false

  • 优势:即使业务方法执行未完成,锁也会自动释放,避免死锁


总结对比表

方法 参数 等待时间 锁持有时间 看门狗 死锁风险
lock() 无限 持有直到手动释放
lock(leaseTime) leaseTime 无限 最多 leaseTime
tryLock(waitTime) waitTime waitTime 看门狗延长 很低
tryLock(waitTime, leaseTime) waitTime, leaseTime waitTime leaseTime 很低

如果你希望,我可以帮你画一张 lock vs tryLock 时序图,直观展示"等待、持锁、看门狗续期、释放锁"的流程,让整个逻辑一眼就看懂。

你希望我画吗?

相关推荐
new_daimond2 小时前
Apache Shiro 技术详解
java·apache
yanqiaofanhua2 小时前
C语言自学--自定义类型:结构体
c语言·开发语言·算法
Skrrapper2 小时前
【C++】STL:Stack详解
开发语言·c++
向前阿、2 小时前
数据结构从入门到实战————栈
c语言·开发语言·数据结构·程序人生
yuriy.wang2 小时前
Spring IOC源码篇六 核心方法obtainFreshBeanFactory.parseCustomElement
java·后端·spring
sali-tec2 小时前
C# 基于halcon的视觉工作流-章39-OCR识别
开发语言·图像处理·算法·计算机视觉·c#·ocr
lightqjx2 小时前
【C++】vector 使用和实现
开发语言·c++
.鸣2 小时前
idea学习日记10: 字符串相关类的底层原理
java·学习
在未来等你3 小时前
Kafka面试精讲 Day 24:Spring Kafka开发实战
java·spring boot·面试·kafka·消息队列·spring kafka·@kafkalistener