Redis - Redisson tryLock 函数参数分析

这里有三个参数:

  1. waitTime:等待时间
  2. leaseTime:超时施放时间
  3. TimeUnit:时间单位

等待时间

如果 ABC… 多个线程去抢夺一把锁,A 成功了,如果设置的是 -1,那么 BCD... 就不等待,直接返回失败,也就是不再去抢夺锁了,一次失败,直接放弃。

如果不是 -1,假如说是 10(单位是秒)那么 BCD… 失败后会择机再次去抢夺,这里的择机抢夺,就代表着不是与 A 抢夺失败后的立马再次抢夺,因为(明知道 A 抢过锁之后会执行自己的业务,需要一定的时间,那么 BCD... 立马再去抢夺锁的意义在哪里呢? 除了徒增 CPU 的负担,没有太大意义)所以这里的择机抢夺,其实是利用了 发布 - 订阅机制。

从上面的图片可以看到,A 抢过锁之后,执行业务,结束之后释放锁,释放锁的时候还 publish (发布)了一个信号,而有人发布,就有人订阅,发布人是 A,订阅人是 BCD… 所以说这里的择机再次抢夺是在 BCD… 接收到 A 发布的消息之后再去抢夺。

当然了,从第一次与 A 抢夺失败,到等待 A 完成业务发布消息这段等待时间 + 第一次和 A 抢夺锁的时间 总数不能超过 10s,毕竟 10s 就是硬性规定,10s 之内,不论发生多么复杂的逻辑,只要拿到锁就行,不行就直接放弃。

超时施放时间

就是说 A 拿到了锁之后, 如果发生了一些异常错误,内部业务没能正常的执行,没能正常执行释放锁的操作,这个时候 这个超时施放时间才会起作用,也就是说,在 A 抢到锁之后,即便 A 的业务出现了堵塞,但是只要没发生一些异常情况,这里的超时施放时间是不起作用的,因为只要不发生异常,内部就会有一个 看门狗,每隔超时施放时间/3就会刷新一次锁的过期时间(是一个定时任务),确保 A 能够执行完成业务,当然,A 执行完业务后,会删除刷新有效期的定时任务。所以说,超时释放时间在正常执行业务的时候,是不发挥作用的,只在出现异常的时候才会起作用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/640764.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高通发布电脑CPU,比英特尔Ultra9领先51%

要说2024年最热门的关键词,那肯定非 AI 莫属,当前 AI 已经开始深入各行各业,AI 电视、AI 手机、AI 车机、AI 家电,以及 AI PC ,这些都意味着 AI 将对各个行业带来的新风向和不小的冲击。 2024 年了,PC 处理器还能卷出什…

验证线缆(汽车线束、网线、多芯线)破损或断开与正常线缆的区别在哪里?依AEM CV-100 k50测试仪

工厂产线生产的线缆(汽车线束、网线、多芯线)做成成品,即2端都安装好了模块。在这种情况下如何快速的判定此条线缆是合格的呢,此处的合格为物理层面上的合格(不会出现开路、短路),也就是最基本保…

第66天:API攻防-接口安全阿里云KEYPostmanDVWSXXE鉴权泄漏

案例一:安全问题-Dvws泄漏&鉴权&XXE 靶场地址:https://github.com/snoopysecurity/dvws-node 利用docker命令去启动 首先先注册一个账户 注册后登录点击admin area 发现点不进去 这里把bp打开但是不抓包,只做流量转发,进…

JavaEE初阶——多线程(六)——线程池

T04BF 👋专栏: 算法|JAVA|MySQL|C语言 🫵 小比特 大梦想 此篇文章与大家分享多线程的第六篇文章,关于线程池 如果有不足的或者错误的请您指出! 目录 3.线程池3.1标准库的线程池3.2 标准库自己提供的几个工厂类3.3自己实现一个线程池完成大体框架接下来完…

单细胞+RIP-seq项目文章| Cell ReportshnRNPU蛋白在小鼠精原干细胞池建立的关键作用

精原干细胞(SSCs)是负责精子发生的干细胞,具有自我更新和分化产生功能性精子的能力。SSCs的持续再生对于维持雄性生育力至关重要。然而,SSC池的发育起源尚不清楚。在哺乳动物中,SSCs源自名为 prospermatogonia&#xf…

众筹商城源码 众筹农业平台 农业乘科技富强之路 线上农业众筹 养殖系统 种植系统源码

内容目录 一、详细介绍二、效果展示1.部分代码2.效果图展示 三、学习资料下载 一、详细介绍 前端是编译后的,后端PHP,带商城,详情看下图 特点和功能: 用户管理:包括注册、登录、个人信息管理等。 项目创建与展示&…

报错:测试报错postman(测试接口)

报错如下 c.e.exception.GlobalExceptionHandler : 异常信息: Content type multipart/form-data;boundary--------------------------952399813172082093419475;charsetUTF-8 not supported 解决: 异常信息 Content type multipart/form-data;boundary…

Git 介绍和安装

Git 介绍和安装 | CoderMast编程桅杆Git 介绍和安装 Git介绍 Git是一款免费、开源的分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目。 Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus T…

【ARM 裸机】模仿 STM32 驱动开发

1、修改驱动 对于 STM32 来说,使用了一个结构体将一个外设的所有寄存器都放在一起,在上一节的基础上进行修改; 1.1、添加清除 bss 段代码, 1.2、添加寄存器结构体 新建一个文件,命名imx6u.h,注意地址的连…

AJAX——封装_简易axios

1.简易axios_获取身份列表 需求:基于Promise XHR 封装 myAxios函数,获取省份列表展示 步骤: 1.定义 myAxios函数,接收配置对象,返回Promise对象 2.发起XHR请求,默认请求方法为GET 3.调用成功/失败的处…

【Spring进阶系列丨最终篇】一文详解Spring中的事务控制

0、说明 本篇文章是【Spring进阶系列】专栏的最后一篇文章,至此,我们对Spring的学习就告一段落,接下来我会持续更新【SpringSpringMVCMyBatis整合】专栏,欢迎免费订阅! 文章目录 0、说明 一、Spring事务控制1、事务的环…

基于微信小程序的宠物寄养小程序,附源码

博主介绍:✌IT徐师兄、7年大厂程序员经历。全网粉丝15W、csdn博客专家、掘金/华为云//InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ 🍅文末获取源码联系🍅 👇🏻 精彩专栏推荐订阅👇&#x1f3…