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

南山做网站关于枪湖南建设厅官方网站官网

南山做网站关于枪,湖南建设厅官方网站官网,兰州高端网站建设,网站外贸推广抢锁过程中#xff0c;获得当前线程#xff0c;通过tryAcquire进行抢锁#xff0c;该抢锁逻辑和之前逻辑相同。 1、先判断当前这把锁是否存在#xff0c;如果不存在#xff0c;插入一把锁#xff0c;返回null 2、判断当前这把锁是否是属于当前线程#xff0c;如果是获得当前线程通过tryAcquire进行抢锁该抢锁逻辑和之前逻辑相同。 1、先判断当前这把锁是否存在如果不存在插入一把锁返回null 2、判断当前这把锁是否是属于当前线程如果是则返回null 所以如果返回是null则代表着当前这哥们已经抢锁完毕或者可重入完毕但是如果以上两个条件都不满足则进入到第三个条件返回的是锁的失效时间同学们可以自行往下翻一点点你能发现有个while( true) 再次进行tryAcquire进行抢锁。 long threadId Thread.currentThread().getId(); Long ttl tryAcquire(-1, leaseTime, unit, threadId); // lock acquired if (ttl null) {return; }接下来会有一个条件分支因为lock方法有重载方法一个是带参数一个是不带参数如果带带参数传入的值是-1如果传入参数则leaseTime是他本身所以如果传入了参数此时leaseTime ! -1 则会进去抢锁抢锁的逻辑就是之前说的那三个逻辑: if (leaseTime ! -1) {return tryLockInnerAsync(waitTime, leaseTime, unit, threadId, RedisCommands.EVAL_LONG); }如果是没有传入时间则此时也会进行抢锁 而且抢锁时间是默认看门狗时间 commandExecutor.getConnectionManager().getCfg().getLockWatchdogTimeout() ttlRemainingFuture.onComplete((ttlRemaining, e) 这句话相当于对以上抢锁进行了监听也就是说当上边抢锁完毕后此方法会被调用具体调用的逻辑就是去后台开启一个线程进行续约逻辑也就是看门狗线程: RFutureLong ttlRemainingFuture tryLockInnerAsync(waitTime,commandExecutor.getConnectionManager().getCfg().getLockWatchdogTimeout(),TimeUnit.MILLISECONDS, threadId, RedisCommands.EVAL_LONG); ttlRemainingFuture.onComplete((ttlRemaining, e) - {if (e ! null) {return;}// lock acquiredif (ttlRemaining null) {scheduleExpirationRenewal(threadId);} }); return ttlRemainingFuture;此逻辑就是续约逻辑注意看commandExecutor.getConnectionManager().newTimeout 此方法 Method( new TimerTask() {},参数2 参数3 ) 指的是通过参数2参数3 去描述什么时候去做参数1的事情现在的情况是10s之后去做参数一的事情 因为锁的失效时间是30s当10s之后此时这个timeTask 就触发了他就去进行续约把当前这把锁续约成30s如果操作成功那么此时就会递归调用自己再重新设置一个timeTask()于是再过10s后又再设置一个timerTask完成不停的续约 那么大家可以想一想假设我们的线程出现了宕机他还会续约吗当然不会因为没有人再去调用renewExpiration这个方法所以等到时间之后自然就释放了。 private void renewExpiration() {ExpirationEntry ee EXPIRATION_RENEWAL_MAP.get(getEntryName());if (ee null) {return;}Timeout task commandExecutor.getConnectionManager().newTimeout(new TimerTask() {Overridepublic void run(Timeout timeout) throws Exception {ExpirationEntry ent EXPIRATION_RENEWAL_MAP.get(getEntryName());if (ent null) {return;}Long threadId ent.getFirstThreadId();if (threadId null) {return;}RFutureBoolean future renewExpirationAsync(threadId);future.onComplete((res, e) - {if (e ! null) {log.error(Cant update lock getName() expiration, e);return;}if (res) {// reschedule itselfrenewExpiration();}});}}, internalLockLeaseTime / 3, TimeUnit.MILLISECONDS);ee.setTimeout(task); }
http://www.hkea.cn/news/14378939/

相关文章:

  • 网站整体运营思路苏州做网站
  • 局机关门户网站建设自查报告范文苏州seo优化外包公司
  • 网站建设 管理与维护试题入门网站分析应该怎么做
  • 专门做推广的网站建设一个网站需要那些技术
  • 制定网站建设规划书查看网页源代码
  • 陕西建设厅网站人才库网站建设的目录浏览
  • 物流公司做网站需求网站建设业务终止合作范本
  • 200m网站空间多少钱抖音小程序入口在哪里
  • 成都网站免费制作教做潮男的网站
  • 淮南市住房与城乡建设部网站网站建设公司走进深圳一百讯
  • 品牌网站建设解决方案网站排名推广工具
  • 给网站增加功能怎么做如何选择宜昌网站建设
  • dw个人网站制作模板站长之家是干什么的
  • 网站 提示危险百青藤广告联盟官网
  • 南宁门户网站有哪些如何让百度搜到网站
  • 心理健康教育网站建设大宗交易查询平台
  • 工艺礼品东莞网站建设电商网站系统
  • 手机网站推荐一个收集链接 做网站
  • 小地方网站建设公司中国建设行业网
  • 网页设计与网站建设课件房产网名字叫啥好听
  • 自主式响应网站搜索引擎网站制作
  • 广西智能网站建设哪家有wordpress 图片管理插件
  • 服务器搭建网站跑不满宽带百度导航官网
  • 兼职工厂网站建设兰州产品营销网站建设
  • 华为网站建设官网企业服务平台上线
  • 自动提卡的网站怎么做的永久免费crm管理系统
  • 网站建设需要服务器支持 吗响应式网站建设特征
  • 如何去掉Wordpress访问网站东莞做网站要多少钱
  • 临沂建设网站公司wordpress安卓显示
  • 安庆市网站建设公司如何做产品网站推广