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

网站数据库连接错误百度网盘官方网站

网站数据库连接错误,百度网盘官方网站,北京海淀区政府网站,多站点网站群的建设与管理本章我们继续将Condition的最后一个方法signal方法,如果前面没有看过的可以点击LockSupport与Condition解析来看看Condition解读的前半部分。 signal方法: public final void signal() {if (!AbstractQueuedLongSynchronizer.this.isHeldExclusively())…

本章我们继续将Condition的最后一个方法signal方法,如果前面没有看过的可以点击LockSupport与Condition解析来看看Condition解读的前半部分。

signal方法:

        public final void signal() {if (!AbstractQueuedLongSynchronizer.this.isHeldExclusively()) {throw new IllegalMonitorStateException();} else {Node var1 = this.firstWaiter;if (var1 != null) {this.doSignal(var1);}}}

signal方法的主要作用就是将线程从Condition队列中唤醒,前面已经讲述过在Condtion的子类ConditionObject内部通过链表来维护整个Condtion队列,并且含有两个属性firstWaiter和lastWaiter分别表示队列头和队列尾部,分析方法首先进行检查当前线程是否持有独占锁。目的是保证持有锁的线程才能调用signal方法来唤醒线程,通过判断之后开始从Condition队列中取出队首线程,随后开始调用doSignal方法来唤醒线程

        private void doSignal(Node var1) {do {if ((this.firstWaiter = var1.nextWaiter) == null) {this.lastWaiter = null;}var1.nextWaiter = null;} while(!AbstractQueuedLongSynchronizer.this.transferForSignal(var1) && (var1 = this.firstWaiter) != null);}

在dosignal中首先将后面的node设置为链表头部,如果后续没有node则将尾链表置为null。

同时调用transferForSignal(first)尝试将节点转移到同步队列,如果转移失败(返回false)且队列还有节点(firstWaiter != null),继续处理下一个节点。

下面我们来看看transferForSignal方法是如何进行转移的。

 final boolean transferForSignal(Node var1) {if (!compareAndSetWaitStatus(var1, -2, 0)) {return false;} else {Node var2 = this.enq(var1);int var3 = var2.waitStatus;if (var3 > 0 || !compareAndSetWaitStatus(var2, var3, -1)) {LockSupport.unpark(var1.thread);}return true;}}

首先进行状态位的CAS设置,如果无法设置表明状态已经改变了直接返回false,表示无法入队。

之后进行入队enq操作(内部是一个循环不断的CAS操作保证能入队)入队完毕之后则查看当前节点状态如果还是阻塞状态则直接调用unpark来唤醒当前线程。

1. 先判断当前线程是否持有当前锁没有则抛出异常

2. 取出Condition队列中的一个首节点尝试入队和唤醒操作

3.失败则再次循环从队伍中取出节点

4.在尝试入队的方法总首先会判断状态值是否符合不符合则直接返回false,符合则会通过CAS循环入队操作,最后判断状态是否为阻塞,为阻塞则直接调用unpark方法进行唤醒操作。

至此Condtion的两个方法已经介绍完毕。

总结:

await方法:

signal方法:

设计精髓

  1. 双队列分离:条件队列(等待条件)与同步队列(竞争锁)分离

  2. 状态驱动waitStatus 精确控制节点生命周期

  3. 无锁算法:CAS 操作保证线程安全

  4. 协作式唤醒:前驱节点负责唤醒后继

  5. 资源继承:await() 返回时自动恢复原始锁状态

典型应用场景

  1. 生产者-消费者:不同条件控制队列空/满

  2. 线程池任务调度:工作线程等待任务到达

  3. 资源池管理:连接可用性通知

  4. 屏障实现:所有线程到达后同时释放

  5. 状态机转换:特定状态变更触发操作

http://www.cadmedia.cn/news/8192.html

相关文章:

  • 中石化第五建设有限公司官方网站武汉关键词seo排名
  • 一定要建设好网站才能备案吗seo工具包
  • 什么做自己的网站武汉网络推广公司排名
  • 网站设计空间蚁百杭州网站seo优化
  • 网站开发助理主要工作网店推广运营策略
  • 邯郸网站制作网站域名解析ip
  • 网站banner轮播代码网络推广渠道分类
  • 简洁网站首页模板seo怎么推排名
  • 微梦网站建设成都百度
  • 支付宝 手机网站支付接口2.0四川seo整站优化费用
  • 吕梁建设机械网站百度入驻
  • 商用图片做公司网站可以吗专业软文
  • 都匀网站建设公司新平台怎么推广
  • 网站设计公司请示惠州seo排名公司
  • app网站建设 - 百度网络推广软件免费
  • 南宁网站建设清单app推广活动策划方案
  • 做家具商城网站爱站小工具计算器
  • 建设独立网站需要什么怎么快速推广自己的产品
  • 外贸网站建设公司平台百度seo如何做
  • 贵州水电建设局网站上海百度公司地址
  • 重庆高端网站建设价格百度搜索广告价格
  • 百度站长平台网址爱站网站seo查询工具
  • 免费建设在线商城的网站微信推广怎么弄
  • 南宁网站开发制作如何做好产品网络推广
  • 如何建立网站自己做站长seo资料站
  • 外贸网站建设定制开发cpm广告联盟平台
  • 专业网站建设服务国际机票搜索量大涨
  • 做一个网站链接怎么做营销推广方案模板
  • 网站建设视频教程百度云国内最大的搜索引擎
  • 网站建设文件上传青岛seo百科