当前位置:   article > 正文

Condition中的等待队列跟AQS中的同步队列是什么关系_等待队列和同步队列

等待队列和同步队列

首先,两个队列都是以node为节点的队列,等待队列是单向队列,同步队列是双向队列。

其次,每一个condition都拥有一个等待队列 ,一个Lock可以有多个condition,每一个condition都是对应了一个单独的条件,当线程获取锁后,如果当前线程没有条件继续执行,需要阻塞,则此时condition对象调用await方法,此时当前线程肯定是同步队列同节点的线程,将当前线程封装一个新的节点尾插添加到condition的等待队列中,同时当前线程释放同步状态,同步队列的后置节点继续尝试获取同步状态,从队列上看,这个过程就是线程节点从同步队列的头部转移到等待队列的尾部;此时,有另一个线程调用了condition对象的signal方法,则此时会将等待队列中的头节点转移到同步队列的为节点,等待获取同步资源。

我觉得之所以有condition的等待队列,是为了更方便的实现线程的等待/通知;并且这种方式也避免了在不符合条件的前提下,线程无用的获取同步状态,节省资源。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/692968
推荐阅读
相关标签
  

闽ICP备14008679号