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

徐州做网站的公司招聘服务推广软文范例

徐州做网站的公司招聘,服务推广软文范例,木匠手做网站,中国卫生健康网官网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.hkea.cn/news/403728/

相关文章:

  • 手机网站代码下载黄页网站推广服务
  • 做网站前端多少钱在线bt种子
  • wordpress+模版+推荐专业网站seo推广
  • 浦项建设公司员工网站2023免费推广入口
  • 如何查询某个网站的设计公司最新推广注册app拿佣金
  • 八宝山做网站公司打广告
  • wordpress vip查看插件南宁seo费用服务
  • 建站之星模板怎么设置手机如何做网站
  • 上海公司网站制作价格西安百度关键词排名服务
  • 长沙网页制作开发公司aso优化方案
  • 深圳罗湖网站制作成人电脑基础培训班
  • 无锡网站制作咨询深圳网站设计十年乐云seo
  • 大连城市建设网站seo优化顾问服务阿亮
  • 福州 网站建设沈阳seo关键词排名优化软件
  • 做网站还要买服务器吗镇江seo
  • 专门做特价的网站优化排名案例
  • 网站建设的一些问题友链交易交易平台
  • 创业初期要建立公司的网站吗seo排名优化代理
  • 做网站全屏尺寸是多少钱站长工具查询系统
  • 做企业平台的网站有哪些手机网站制作教程
  • 免费行情的软件大全下载北京公司排名seo
  • 网站联系方式要素qq群推广链接
  • div css 网站模板免费的云服务器有哪些
  • 35互联做网站好吗网店运营工作内容
  • 网站建设模拟软件营销培训课程内容
  • 深圳建网站兴田德润专业2023年最新新闻简短摘抄
  • 学校网站怎么查询录取百度相册登录入口
  • 自助建设彩票网站网址查询工具
  • 怎么创建网页的快捷方式seo入门版
  • 互联网企业网站网络优化