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 时序图,直观展示"等待、持锁、看门狗续期、释放锁"的流程,让整个逻辑一眼就看懂。

你希望我画吗?

相关推荐
爱笑的源码基地24 分钟前
一款全开源的信创云PACS影像云平台解决方案,支持多模态医学影像处理(CT/MR/DR/超声/病理等)
java·源码·国产化·pacs·云影像·区域pacs
我命由我1234541 分钟前
Android 开发问题:ClickableSpan 的点击事件没有生效
java·java-ee·android studio·android jetpack·android-studio·android runtime
云和恩墨1 小时前
数据库一体机简史:从ODA到zData X,命名之中的玄机
数据库·vr
2zcode1 小时前
基于MATLAB图像处理的饮料瓶灌装液位检测系统设计与实现
开发语言·图像处理·matlab
万亿少女的梦1681 小时前
基于Python的高考志愿填报辅助系统设计与实现
java·spring boot·python·mysql·vue
微信开发api-视频号协议1 小时前
企业微信外部群开发自动化实践过程
java·前端·微信·自动化·企业微信·ipad
数据库小学妹2 小时前
KES是什么?国产数据库技术架构、核心能力与选型实战解析
数据库·经验分享·架构·国产数据库·数据库选型·信创数据库
犀利豆2 小时前
#AI in Harness(一)
java·ai编程
极***涯2 小时前
深度拆解:多源BFS路径重构难题——跳出单层遍历误区,搞定高阶最短路径全量解
java·重构·宽度优先
必须得开心呀2 小时前
QT解决中文乱码问题
开发语言·qt