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

企业网查询四六级网站seo优化8888

企业网查询四六级,网站seo优化8888,网站建设需要会什么软件,东莞搜索seo优化排名双向链表 双向链表的特点是它有两个指针,一个指针指向前置节点,一个指针指向后继节点。所以,双向链表可以支持 常量 O(1) 时间复杂度的情况下找到前驱结点,基于这样的特点。双向链表在插入和删除操作的时候,要比单向链…

双向链表

双向链表的特点是它有两个指针,一个指针指向前置节点,一个指针指向后继节点。所以,双向链表可以支持 常量 O(1) 时间复杂度的情况下找到前驱结点,基于这样的特点。双向链表在插入和删除操作的时候,要比单向链表简单、高效。

AQS使用双向链表

因此,从双向链表的特性来看,我认为 AQS 使用双向链表有三个方面的考虑:
第一个方面,没有竞争到锁的线程加入到阻塞队列,并且阻塞等待的前提是,当前线程所在节点的前置节点是正常状态,这样设计是为了避免链表中存在异常线程导致无法唤醒后续线程的问题(如图)所以线程阻塞之前需要判断前置节点的状态,如果没有指针指向前置节点,就需要从 head 节点开始遍历,性能非常低。

第二个方面,在 Lock 接口里面有一个,lockInterruptibly()方法,这个方法表示处于锁阻塞的线程允许被中断。也就是说,没有竞争到锁的线程加入到同步队列等待以后,是允许外部线程通过interrupt()方法触发唤醒并中断的。这个时候,被中断的线程的状态会修改成 CANCELLED。(如图)被标记为 CANCELLED 状态的线程,是不需要去竞争锁的,但是它仍然存在于双向链表里面。意味着在后续的锁竞争中,需要把这个节点从链表里面移除,否则会导致锁阻塞的线程无法被正常唤醒。在这种情况下,如果是单向链表,就需要从 Head 节点开始往下逐个遍历,找到并移除异常状态的节点。同样效率也比较低,还会导致锁唤醒的操作和遍历操作之间的竞争

第三个方面,为了避免线程阻塞和唤醒的开销,所以刚加入到链表的线程,首先会通过自旋的方式尝试去竞争锁。但是实际上按照公平锁的设计,只有头节点的下一个节点才有必要去竞争锁,后续的节点竞争锁的意义不大。否则,就会造成羊群效应,也就是大量的线程在阻塞之前尝试去竞争锁带来比较大的性能开销。所以,(如图)为了避免这个问题,加入到链表中的节点在尝试竞争锁之前,需要判断前置节点是不是头节点,如果不是头节点,就没必要再去触发锁竞争的动作。所以这里会涉及到前置节点的查找,如果是单向链表,那么这个功能的实现会非常复杂。

http://www.ritt.cn/news/12958.html

相关文章:

  • 做外贸那个网站好网络优化大师下载
  • wordpress头部工具栏seo案例分析及解析
  • 怎么做足球直播网站排名nba
  • 网店推广的作用是站长工具seo诊断
  • 网站建设方案 市场分析优化推广关键词
  • 音乐网站设计总结关键词排名优化软件价格
  • 建设门户网站的意义郑州网站建设哪家好
  • 网站建设兴田德润国内专业seo公司
  • 网站里自已的微信联系如何做百度品牌广告
  • 网站怎么做关键词优化内容营销成功案例
  • 国外域名购买网站网络营销推广的方法有哪些
  • 新疆土地建设管理局网站查询网站相关网址
  • 网络公司除了做网站如何宣传推广产品
  • 西平县住房城乡建设局网站软文街官方网站
  • 猪八戒网站建设网络服务器
  • 曰本做爰吃奶网站推广方案怎么写
  • 网站的费用深圳营销型网站
  • 赣州新闻联播视频小红书seo排名规则
  • 中山市做网站专业的广州百度推广外包
  • 临沂做网站需要多少钱谷歌app官方下载
  • 网站开发常见面试题电商平台有哪些
  • 网站建设项目申请长沙网络营销推广公司
  • 广州建外贸网站公司简介免费二级域名平台
  • 网站内部代码优化旺道网站优化
  • 做网站必备网络营销的方法
  • 公司做网站主机是什么用途龙岩网站推广
  • 做网站asp互动营销经典案例
  • 专业做网站优化需要多久手机注册网站
  • 用php做网站后台辽宁seo推广
  • 网站建设推广的方法西安网站设计