Java并发系列之AbstractQueuedSynchronizer源码分析(概要分析)
为了叙述简单,后续有些地方会用AQS代表这个类。上面的代码列出了AQS的所有成员变量,可以看到AQS的成员变量只有三个,分别是同步队列头结点引用,同步队列尾结点引用以及同步状态。图中T表示线程,每个结点包含一个线程,线程在获取锁失败后首先进入同步队列排队,而想要进入条件队列该线程必须持有锁才行。Node代表同步队列和条件队列中的一个结点,它是AbstractQueuedSynchronizer的内部类。可以把同步队列和条件队列看成是排队区,每个结点看成是排队区的座位,将线程看成是排队的客人。只有保证前面位置上的牌子为SIGNAL,当前线程才会安心的睡去。还有就是每个结点进入队列中时它的等待状态是为0,只有后继结点的线程需要挂起时才会将前面结点的等待状态改为SIGNAL。
用户评论