美文网首页
AQS的节点(Node)实现原理

AQS的节点(Node)实现原理

作者: 火兰人一个 | 来源:发表于2017-08-20 21:49 被阅读0次

    在AQS中有一个静态内部类Node,node包含了获取同步状态失败的线程引用、等待状态、前驱节点和后继节点,节点的属性类型和名称以及描述。

    int waitStatus:1、CANCELLED,值为1 。场景:当该线程等待超时或者被中断,需要从同步队列中取消等待,则该线程被置1,即被取消(这里该线程在取消之前是等待状态)。节点进入了取消状态则不再变化;2、SIGNAL,值为-1。场景:后继的节点处于等待状态,当前节点的线程如果释放了同步状态或者被取消(当前节点状态置为-1),将会通知后继节点,使后继节点的线程得以运行;3、CONDITION,值为-2。场景:节点处于等待队列中,节点线程等待在Condition上,当其他线程对Condition调用了signal()方法后,该节点从等待队列中转移到同步队列中,加入到对同步状态的获取中;4、PROPAGATE,值为-3。场景:表示下一次的共享状态会被无条件的传播下去;5、INITIAL,值为0,初始状态。

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

    Node next:后继节点

    Node nextWaiter:等待节点的后继节点。如果当前节点是共享的,那么这个字段是一个SHARED常量,也就是说节点类型(独占和共享)和等待队列中的后继节点共用一个字段。(注:比如说当前节点A是共享的,那么它的这个字段是shared,也就是说在这个等待队列中,A节点的后继节点也是shared。如果A节点不是共享的,那么它的nextWaiter就不是一个SHARED常量,即是独占的。)

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

    相关文章

      网友评论

          本文标题:AQS的节点(Node)实现原理

          本文链接:https://www.haomeiwen.com/subject/taptdxtx.html