首页 > 编程语言 >AQS 中的 Node 内部类

AQS 中的 Node 内部类

时间:2023-02-07 18:55:36浏览次数:39  
标签:Node 内部 AQS int 节点 thread static final

AQS 中的 Node 内部类

Node 内部类

Node 的主要作用,作为等待队列中的节点存在

Node 源码

   static final class Node {

        /**
         * 标记:该节点正在共享模式下等待
         */
        static final Node SHARED = new Node();

        /**
         * 标记:该节点正在独占模式下等待
         */
        static final Node EXCLUSIVE = null;

        // =================== waitStatus 状态值 ===================
       
        static final int CANCELLED =  1;

        static final int SIGNAL    = -1;

        static final int CONDITION = -2;

        static final int PROPAGATE = -3;

        /**
         * 该值只有以下几个状态:
         *   SIGNAL:    取消状态:表示该线程已取消(该节点因超时或中断而被取消)
         *   CANCELLED: 通知状态:指示后续线程需要被唤醒(注意:这个状态一般都是由后继的线程设置的)
         *   CONDITION: 条件等待状态 :当前节点在 Condition 节点队列当中,节点在等待 Condition 通知
         *   PROPAGATE: 传播状态:指示下一个 acquireShared 应无条件传播(将唤醒后继线程的能力,传递下去,主要用在共享模式下)
         *   0:         以上都不是
         *
         */
        volatile int waitStatus;

        /**
         * 前驱节点
         */
        volatile Node prev;

        /**
         * 后继节点
         */
        volatile Node next;

        /**
         * 该节点的线程
         */
        volatile Thread thread;

        /**
         * 取值范围:Node.SHARED ,Node.EXCLUSIVE
         * SHARED: 共享模式
         * EXCLUSIVE: 独占模式 (在条件队列下:表示条件队列当中的后继节点,链接到下一个等待条件的节点,单向链表)
         */
        Node nextWaiter;

        /**
         * 如果节点在共享模式下等待,则返回true。
         */
        final boolean isShared() {
            return nextWaiter == SHARED;
        }

        /**
         * 返回上一个节点,如果为null,则抛出NullPointerException。
         * 当前置项不能为空时使用。空检查可能被取消,但存在以帮助VM。
         */
        final Node predecessor() throws NullPointerException {
            Node p = prev;
            if (p == null)
                throw new NullPointerException();
            else
                return p;
        }

        Node() {    // Used to establish initial head or SHARED marker
        }

        Node(Thread thread, Node mode) {     // Used by addWaiter
            this.nextWaiter = mode;
            this.thread = thread;
        }

        Node(Thread thread, int waitStatus) { // Used by Condition
            this.waitStatus = waitStatus;
            this.thread = thread;
        }
    }

标签:Node,内部,AQS,int,节点,thread,static,final
From: https://www.cnblogs.com/coolyang/p/17099493.html

相关文章

  • node.js的入门基础学习
    nodejs的下载安装node.js官网下载node.js程序Node.js(nodejs.org)nodejs的基础模块的使用nodejs文件需要在对应文件路径的终端(cmd)中打开使用,命令:path>node文件......
  • 《安富莱嵌入式周报》第302期:芯片内部Flash读保护攻击,开源智能手表设计,超棒静电学手册
    往期周报汇总地址:http://www.armbbs.cn/forum.php?mod=forumdisplay&fid=12&filter=typeid&typeid=1042023年的视频专题教程继续开始录制视频版:https://www.bilibili.......
  • 1.1 CPU的内部结构解析
    CPU(中央处理器)相当于计算机的大脑,CPU和内存都是由许多晶体管组成的电子部件,通常称为IC(集成电路)。CPU的内部是有寄存器,运算器,控制器,时钟组成的.CPU所负责的就是解释和运行......
  • 聊聊JUC包下的底层支撑类-AbstractQueuedSynchronizer(AQS)
    聊聊JUC包下的底层支撑类-AbstractQueuedSynchronizer(AQS)juc包下的一堆并发工具类是我们日常开发特别是面试中常被拿来问的八股文之一,为了工作也好,为了面试也罢,今天开始......
  • AttributeError: 'Node' object has no attribute 'output_masks'
    错误:Traceback(mostrecentcalllast):File"/home/nianxiongdi/algorithm/deform-conv/scripts/scaled_mnist1.py",line94,in<module>inputs,outputs,mod......
  • node安装与环境搭建
    安装node地址:https://nodejs.org/en/下载LTS稳定版下载后cmd查看node版本和npm版本创建两个文件夹node_cachenode_global可以用命令创建npmconfigsetprefix"D......
  • 在Mac上怎么切换node版本
    今天接手一个老项目,跑不起来,到stackflow查询报错有大神建议降低node版本。我当前是18.14.01、安装n模块sudonpminstall-gn2、安装指定版本的node,随便到node官网找......
  • node中间件
    Express的中间件Express的中间件,本质上就是一个function处理函数.Express中间件的格式如下:需要注意的是:中间件有三个参数。在中间件的形参列表中。必须包含nex......
  • 【JS】node.js初探
    原本只是为了方便在VSCode中调试JS代码安装了node.js,但最近看了许多关于node.js的文章,心血来潮打算用JS写写后端。1.理解node.js懂一些JavaScript和开发Node.js......
  • nodejs中aes-128-cbc加密和解密
    和java程序进行交互的时候,java那边使用AES128位填充模式:AES/CBC/PKCS5Padding加密方法,在nodejs中采用对应的aes-128-cbc加密方法就能对应上,因为有使用向量(iv),所以nodejs中......