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

你希望我画吗?

相关推荐
Lam Tang6 小时前
APS 系列文章10
java·代理模式
考虑考虑7 小时前
Excel导入时产生特殊字符处理
java·后端·java ee
90后小陈老师7 小时前
PHP 配置默认值失效排查实录:isset 兜底遇上表单空串回填,首页文案是怎么集体消失的
开发语言·php
何以解忧,唯有..7 小时前
数据库索引失效的常见情况与优化策略
数据库·sql·oracle
Scabbards_7 小时前
面试Leetcode - Heap 堆
java·leetcode·面试
程序员清风8 小时前
专业再升级!程序员专属显示器明基RD280UG上手实测!
java·后端·面试
JJJennie7778 小时前
Gemini 3.7 Flash 上线,Google 想让 AI 多干活
开发语言·javascript·ecmascript
这个DBA有点耶8 小时前
分布式数据库到底该不该上?从判断标准到架构选型的实战思考
数据库·架构·dba
01_ice8 小时前
MySQL库和表的操作
数据库·mysql
wuyk5558 小时前
Python 第三章:列表 List
服务器·开发语言·python