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

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

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

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

你可能感兴趣的:(JDK1.8,java,开发语言)