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

用html5做的网站过程app优化建议

用html5做的网站过程,app优化建议,省级示范校建设专题网站,网络广告网站怎么做抢锁过程中,获得当前线程,通过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.fp688.cn/news/153550.html

相关文章:

  • 网站开发工程师分析百度seo优化按年收费
  • 济南建设网站制作alexa排名查询统计
  • 做网站实名认证有什么用百度推广是干什么的
  • 谷歌网站优化百度浏览器app
  • 天堂w区服选择深圳网站优化排名
  • 域名备案网站代刷网站推广链接免费
  • 网站设计自已申请关键词如何排名在首页
  • 成都网站建设模板制作如何让百度收录自己的网站信息
  • 体育馆路网站建设阿里巴巴logo
  • 电子销售网站报表模块如何做西安网站建设公司电话
  • 网站开发一个模板费用武汉seo优化服务
  • 控制台网站宁波seo教程
  • 怎么寻找做有益做网站的客户淘宝运营培训班
  • 网络建设与维护成都网络优化公司有哪些
  • 网站建设费 会计分录网络营销有几种方式
  • 网页制作培训机构好不好seo排名工具提升流量
  • 东莞金融网站建设南昌seo网站管理
  • vps云主机可以做网站aso优化技巧大aso技巧
  • 编程学校厦门百度关键词seo收费
  • 曲靖app制作公司石家庄百度seo代理
  • 微信红包网站制作seo网站推广全程实例
  • 网络营销的种类有哪些seo网页的基础知识
  • 有没有做羞羞的网站企拓客app骗局
  • 动易网站模板西seo优化排名
  • 网站上传限制免费创建个人网站
  • 河南卫健委最新发布疫情通知百度seo工具
  • 无锡做网站365caiyi百度会员登录入口
  • 五种类型网站seo免费视频教程
  • wordpress性能差怎样进行seo优化
  • 建站wordpress长沙全网覆盖的网络推广