美文网首页
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:获取同步状态的线程

相关文章

  • J.U.C 之AQS

    J.U.C 之AQS AbstractQueuedSynchronizer - AQS 实现原理 使用Node实现...

  • AQS的节点(Node)实现原理

    在AQS中有一个静态内部类Node,node包含了获取同步状态失败的线程引用、等待状态、前驱节点和后继节点,节点的...

  • Java基础建设 4-AQS源码分析

    一、AQS分析 1.原理概述 2.重要属性 Node节点 Head/Tail条件队列的头尾节点,Head节点是已经...

  • AQS

    AQS(AbstractQueuedSynchronizer) node node是等待队列(双向队列)的节点分别...

  • 第七章

    AbstractQueuedSynchronizer——AQS 抽象排队同步器 AQS实现: 1.使用Node实现...

  • 死磕 java同步系列之AQS起篇

    问题 (1)AQS是什么? (2)AQS的定位? (3)AQS的实现原理? (4)基于AQS实现自己的锁? 简介 ...

  • AbstractQueueSynchronizer AQS

    AbstractQueueSynchronizer AQS 使用Node实现FIFO队列,Node中包含 前驱,后...

  • CountDownLauth深入分析

    AQS介绍 在AQS维护的CLH队列锁中,每个节点(Node)代表着一个需要获取锁的线程。该Node中有两个常量S...

  • ReentrantLock(AQS),Volatile,Sync

    本文参考: JUC学习(八):AQS的CLH队列并发编程——详解 AQS CLH 锁JMM和底层实现原理 AQS ...

  • 二.线程安全原理简介

    一.实现线程安全的原理 锁的线程安全实现原理:AQS+CASAQS:AbstractQueuedSynchroni...

网友评论

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

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