当前位置: 首页 > news >正文

南通市建设工程网站免费ppt模板下载手机

南通市建设工程网站,免费ppt模板下载手机,易企秀h5制作官网,汕头网站设计多少钱MultiLock MultiLock,英语直译为多个锁。 redisson分布式锁中的MultiLock这个机制,可以将多个锁合并为一个大锁,对一个大锁进行统一的申请加锁以及释放锁 一次性锁定多个资源,再去处理一些事情,然后事后一次性释放所…

MultiLock

MultiLock,英语直译为多个锁。

redisson分布式锁中的MultiLock这个机制,可以将多个锁合并为一个大锁,对一个大锁进行统一的申请加锁以及释放锁

一次性锁定多个资源,再去处理一些事情,然后事后一次性释放所有的资源对应的锁

RLock lock1 = redisson.getLock("anyLock1");RLock lock2 = redisson.getLock("anyLock2");RLock lock3 = redisson.getLock("anyLock3");RedissonMultiLock multiLock = new RedissonMultiLock(lock1, lock2, lock3);multiLock.lock();multiLock.unlock();

在项目里使用的时候,很多时候一次性要锁定多个资源,比如说锁掉一个库存,锁掉一个订单,锁掉一个积分,一次性锁掉多个资源,多个资源都不让别人随意修改,然后你再一次性更新多个资源,释放多个锁

MultiLock的源码,我们初步看一下,其实也不过是没什么特别的,就是包裹了多个RedissonLock,底层就是尝试依次对每一个锁都要成功加锁,如果所有的锁都成功加锁了之后,那么就认为MultiLock就成功加锁了

释放锁

依次去释放每一把锁就可以
释放锁的代码一目了然,就是循环释放每一把锁。
在这里插入图片描述

加锁

再看一下的源码
在这里插入图片描述

这里的locks就是RedissonMultiLock中我们传的几个锁,锁的个数*3,基础等待时间baseWaitTime是4500毫秒。
if和else判断中都是算等待时间的逻辑。
而最下面的while死循环,就是要加锁的逻辑,就是不停地加锁,失败了继续加锁。只要没有全部获取到就一直循环。
在这里插入图片描述

RedissonMultiLock.tryLock()方法中
截止到226行,这几个时间分别是
watTime = 4500毫秒
time = 当前时间
remainTime = 4500毫秒
lockWaitTime = 4500毫秒
failedLocksLimit = 0
awaitTime = 4500毫秒

继续走,到for循环里面,取出来locks中的一个锁开始处理
调用了lock.tryLock()方法
这是获取锁的关键代码
lockAcquired = lock.tryLock(awaitTime, newLeaseTime, TimeUnit.MILLISECONDS);

lock是底层的RedissonLock,他没有使用lock.lock(),用的是tryLock(),指定了获取锁等待超时的时间,4500毫秒,必须获取到这个锁,如果获取不到这个锁,就退出,标记为获取锁失败

哪怕是获取到锁之后,这个锁在多长时间内会自动释放,newLeaseTime是-1,因为你的newLeaseTime是-1,所以说如果获取到了锁,会启动一个lock watchdog不断的刷新你的锁key的生存时间为30000毫秒
在这里插入图片描述

继续往下,现在情况是拿到锁之后,不会再走蓝色选中的代码了。

最后走到if (remainTime != -1)代码中去,这里的逻辑是怎么回事呢

remainTime = 4500毫秒
经过了一个lock的获取,可能消耗掉了比如说20毫秒,100毫秒,500毫秒,耗费了500毫秒
remainTime = 4500毫秒 - 500毫秒 = 4000毫秒
time = 当前时间

如果remainTime <= 0,意味着什么呢?获取锁的时间已经超过了4500毫秒了,迄今为止,你获取到这些所的时间,已经超过了预设的4500毫秒了,相当于是你获取多个锁的时间,最多不能超过4500毫秒

如果一旦获取各个锁的时间超过了4500毫秒,此时就会释放掉所有已经获取的锁,然后返回一个false,再次进入while true中的一个死循环,尝试走上述一模一样的流程

获取了三把锁,耗时了1000毫秒,此时remainTime还剩下3500毫秒,4477,4500,23毫秒获取了三把锁
在这里插入图片描述
释放锁的话,就是依次调用所有的锁的释放的逻辑,lua脚本,同步等待所有的锁释放完毕,才会返回

而加锁的话,默认的行为之下,你包裹了几把锁,就会锁数量 * 1500毫秒,获取所有的锁必须在多长时间之内就要结束,如果超时就会重新再次死循环尝试获取锁。使用的是各个锁的tryLock()方法,指定了说在获取每个单独的锁的时候,会有一个获取超时退出的时间

http://www.yayakq.cn/news/430747/

相关文章:

  • 微软雅黑做网站是否侵权wordpress 微博登录
  • 长沙好的网站建设品牌六安市 网站集约化建设
  • 深圳做网站要无锡做网站专业的公司
  • 音乐网站建设规划书深圳比较大的做网站设计公司
  • 给帅哥做奴视频网站地址域名买好怎么开始做网站
  • 百度公司网站seo方案五金外发加工网
  • 安全质量报监建设局网站闲鱼网站如何赚钱
  • 解放碑电子商务网站建设服务类的网站怎么做
  • 做dj网站能赚钱吗网站建设这个
  • 青海网站建设哪家强建设高端网站的公司
  • 自己做一个网站的成本北京网站开发公司大全
  • 南宁霸屏网站开发视频一键生成网址链接
  • 做网站好找工作吗php建站
  • 我怎么做个人网站结合实际
  • 微信小程序可以做电影网站吗宣传推广费用预算
  • 松江做网站的公司wordpress的登录地址修改
  • 杭州网站排名优化工具大兴网站设计
  • 怎么做网站需要多少钱wordpress调用排序从大到小
  • 网站建设_免费视频永久免费的网站软件
  • 建设网站网站建站企业网站建设如何去规划
  • 西安高新区网站制作做网站有必要用wordpress
  • 东莞营销型网站建设流程做一个企业的网站怎么做的
  • 企业网站优化找哪家wordpress主题会员功能
  • 无锡招标网官方网站企业vi系统设计公司
  • 西安网站建设开发公司怎么样店铺设计用什么软件
  • 深圳设计网站的公司网站seo步骤
  • 成都网站设计开发做得好中国十佳企业网站设计公司
  • 网站站点连接不安全商务网站建设课程设计
  • wordpress页头图片如何建设和优化网站
  • php 网站 服务器做网站优化的价格