AQS初探-Node

AQS有一个静态内部类Node,即CHL队列中的节点对象,对象中包含了前驱节点,后驱节点,等待节点的后续节点,等待获取同步状态的线程引用、等待状态。

int waitStatus:
1、CANCELLED :值为1,当线程等待超时或者被中断,则取消等待,设等待状态为-1,进入取消状态则不再变化。
2、SIGNAL :值为-1。后继节点处于等待状态,当前节点(为-1)被取消或者中断时会通知后继节点,使后继节点的线程得以运行
3、CONDITION :值为-2.当前节点处于等待队列,节点线程等待在Condition上,当其他线程对condition执行signall方法时,等待队列转移到同步队列,加入到对同步状态的获取。
4、PROPAGATE:值为-3,与共享模式相关,在共享模式中,该状态标识结点的线程处于可运行状态。
5、0状态:值为0,代表初始化状态。

Node prev:前驱节点,当节点加入同步队列的时候被设置(尾部添加)

Node next:后继节点

Node nextWaiter:Node既可以作为同步队列节点使用,也可以作为Condition的等待队列节点使用(将会在后面讲Condition时讲到)。在作为同步队列节点时,nextWaiter可能有两个值:EXCLUSIVE、SHARED标识当前节点是独占模式还是共享模式;在作为等待队列节点使用时,nextWaiter保存后继节点。

Thread thread:获取同步状态的线程

猜你喜欢

转载自blog.csdn.net/qq_28605513/article/details/84194624
AQS