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

深圳机械网站建设网页设计与制作课程结构

深圳机械网站建设,网页设计与制作课程结构,简历表格 个人简历手机版,衡阳营养师报考网站抢锁过程中,获得当前线程,通过tryAcquire进行抢锁,该抢锁逻辑和之前逻辑相同。 1、先判断当前这把锁是否存在,如果不存在,插入一把锁,返回null 2、判断当前这把锁是否是属于当前线程,如果是&a…

抢锁过程中,获得当前线程,通过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) 这句话相当于对以上抢锁进行了监听,也就是说当上边抢锁完毕后,此方法会被调用,具体调用的逻辑就是去后台开启一个线程,进行续约逻辑,也就是看门狗线程:

RFuture<Long> 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;}RFuture<Boolean> future = renewExpirationAsync(threadId);future.onComplete((res, e) -> {if (e != null) {log.error("Can't update lock " + getName() + " expiration", e);return;}if (res) {// reschedule itselfrenewExpiration();}});}}, internalLockLeaseTime / 3, TimeUnit.MILLISECONDS);ee.setTimeout(task);
}
http://www.yayakq.cn/news/850817/

相关文章:

  • 怎样做国外电子商务网站建筑工程素材资源网站
  • 新泰网站制作创世网站
  • 做教育的网站杭州网站建设品牌
  • win7 asp.net网站架设腾讯云服务器使用教程
  • 企业形象网站建设意义wordpress no.7高级版
  • 找人做网站都要提供什么公司logo需要注册吗
  • 毕业设计代做网站都可信么桂平网站建设
  • 做那个网站大全网站设计的基本知识结构
  • 网站建设的书籍windows wordpress伪静态
  • 盘锦做网站公司广州工商注册大厅
  • 网站后台shopadmin输在哪里淄博市网站建设
  • 唐山专业做网站公司乌海seo公司
  • 派点网站建设咸阳做网站哪家好
  • 有什么兼职做it的网站好保定百度推广联系电话
  • 未备案网站 怎么处理北京 网站备案
  • 织梦网站后台密码错误公明做网站
  • 网站广东省备案系统7个免费的ui素材网站
  • 单页面网站 万网x3网站建设标准依据
  • 查询网站有哪些导入链接及数量电脑安装什么版本wordpress
  • 怎么制作网站链接转发视频怎么用手机免费下载1688视频
  • 网站导航栏效果昆明网站建设大全
  • 免费家具网站模板ui设计公司排行榜
  • 网站诊断seo当前数据是指制作一个自己的网站
  • 上海 网站设计企业网络管理系统
  • 在哪里买空间做网站删除wordpress主题
  • 腾讯网站开发规范做网站大概需要几个人
  • 一级a做爰片免费观看 安全网站盐城高端网站建设
  • 长沙做网站设计公司网页美工薪酬范围
  • 企业可以备案几个网站做电商平台网站有哪些内容
  • 做 爱 网站小视频下载如何创建网站