00:00
好,我们继续AQS自身说完了,那么下面就来说一下在as内部的这个类node,好,注意它在as类的内部来吧,那么大家请看啊。打开我们的源码。在这呢,我已经将它折叠,为了给大家好看,那么刚才呢,主要给大家介绍AQS来,那么头尾指针Y加state这个状态下面打开我们的在A和S里面的noe节点,那么同学们请看啊,也就是从380行一直到我们的514行,这个是我们的漏斗节点,你可以把它理解为就是银行后客区里面的椅子,那么每个椅子就要做一个请求线程,就要做一个来办理业务的顾客,那么这个顾客大家请看。就是我们的什么thread多线程的一个线程类,好,那么这个类它有些什么东东呢?来首先是你这个no。它分为共享型的还是独占型的第二个。
01:04
有很多状态,那么在这请大家注意一个细节,只有一是canl,它是正数,其他负一、负二、负三都是小于零的,那么。它这个里面的意思就是说,假设啊,排队在这个椅子里面的线程,一个个noe节点,那么排着排着我不想排了,那么自然而然我这个node节点上的状态将会被陈早,对吧?比如说我现在觉得前面的人特别多,我不想再去办理,我改天再来吧,你应该允许别人。撤吧,对吧,那么第二种sign呢,Condition,那么传播signal的意思呢,代表请看,那么这个叫wait,后面我们会说啊,这个值呢是说明。后续线程需要被unpaing,就是后续线程需要被唤醒,而这个呢,说明什么?在condition这个队列里面所等待的一种情况,而proation呢,是什么?传播广播的意思有点类似于我们spring里面的那个事物的那个传播机制啊,那个单词,那么它的意思呢?假到负三,那么代表一块的传播。
02:10
通知好吧,那么这个呢,是它的不同的状态,那么再来这个单词非常重要,这个变量。非常关键,叫wait,那么在这听好,我们前面下的功夫越细越慢,不要嫌老师啰嗦,后面我们读源码解读的时候,你呢,就不会有,诶突然有一个卡顿,这个是什么意思啊,那么在这最后说一遍,来先说理论。大家请看。我这儿写了个重要。那么他们两个呢,是什么概念呢?这个叫state是AQS的int类型变量,而这个是叫。Weightt是node的特类型变量,那么所以说就是node,它的等待状态叫weightt,那么这个非常重要和关键,它的值就跟上面有关系,后面我们到源码分析的时候再说,在这理论上先过一遍,混个眼熟即可。那么接下来大家请看我们这个noe节点,还有一个这个节点的描述,这个节点的等态状态,那么来这个节点的前置节点,这个节点的后置节点,每个节点。
03:24
它呢,都是封装进去一个请求线程那么好。这个呢是代表它的前面这个节点的状态,并返回OK,那么这个node现在呢,它呢,只要是有这个node这个P,那么前面这些状态呢都能获得,那么主要就是返回我的前置节点,好,那么剩下就是一些什么,它相关的空仓或者带着各种参数的是吗?构造方法好,那么回到这儿了以后,我们呢,可以来说它呢。就是等候区当中,其他顾客也是,每个顾客就类比为一个线程啊,他们的什么等待状态,队列中每个排队的一个个体就是一个node,好,那么再来看啊,它的内部结构刚才我们已经看到了。
04:07
No,那么看完了源码是共享模式还是独占模式,那么来。只有一是。正所其他全是负锁,那么这个呢,线程被取消,就是这个漏E节点,人家不想排队了,走了,那么来新通知嘛,后续线程需要唤醒,那这个呢,是等待的condition,就我们都学过那个lock condition,它需要被唤醒,那么这个是共享模式,同步状态获取,将无条件的什么传播下去,那么来初始值为几,零状态时就是上面这几种,那么默认每一个位S,那么它呢,都是零,好,那么前置后置线程以及对应的封装方法,好。那么noe它的整个类我们大致的过了一遍,那么这个最重要的是它的属性说明来。因为啊,到这儿了以后啊,就是一些构造方法,它的前置节点啊等等,那么三个构造方法这个呢,一看也就明白,那么接下来我们呢,来看一眼它的属性说明,这张表后续我们也会用啊,那么第一个。
05:10
表示这个noe节里面,你们封装的这个线程是以共享的模式等待锁,而这个是以独占的方式等待锁,我们在这儿大家请看一个node类共享还是独占。重点的我们来划拉出来wait,那么这个就是当前节点在等待队列中的状态,因为比如说啊,这个上面这个状态银行窗口已经空出来了,那么某个节点被通知啊,你就可以进去办理业务了啊,就像叫号一样,那么来这个wait data,它也有以下这些值默认啊,任何一个in特类型的,对吧,默认值都是零,那么。零一,负一,负二,负三分别是什么样的状态和什么样的表现值,都给大家在这张图总结好,那么后续我们就会要一定要明白,在这个位塔它的取值不同,那么它的出对和入对将会导致不同的变化,非常的。
06:07
高效和复杂,那么你可以看得出大神道格里他写代码时候他的脑袋真的是很聪明,好那么在这我们呢,就给大家呢,介绍了外围的AQS的和A内部的note节点,它们各自的方法和常用的状态,最后就是这句话,一个是AQS的,一个是note节点的wait,好,那么其他的状态我们后续源码说。
我来说两句