00:00
各位同学大家好,接下来我们按照一周南三步进入到我们的中等相关的一个难度,那么最底子是为了AQS的源码分析,那么对于AQS前面它有些前置知识,就是源码分析的前置知识储备,我们需要具备好,那么接下来同学们露一眼AQS的内部的体系架构。那么通过我们的前面讲解,我们呢,了解所谓AQS啊,其实而言呢,它呢。本质就是一个双向队列加个状态位。第二个AQS内部是靠node节点来形成队列,那么。说人话的意思就是这儿有个红色的大框框,那么这个就是我们的AQ。S,好,那么在AQS里面又有一个蓝色的框框,好吧,那么它呢,也就是我们的是吗?Node节点好,那么接下来我们来看一下这个结构AQS和node节点,那么在具体到细内部的细节的时候,我们回到我们的使用。
01:10
远程的落考是大家最熟悉的。API层面lock lock中间线引的业务逻辑,那么大家都晓得这个lock哪来的?原车的洛克。Design靠的是一个C口这么一个类,而这个类是它在原称的lock里面的一个抽象的静态内部类C,它继承了aqs,所以说人成的洛克跟as有关系。那么来吧,同学们先混个眼熟。来它们两者怎么勾搭上它,我们现在对外面使用,我们用的是落凡接口,必然有实现类天上飞的理念,必然要有落地的实现,好,那么明白了lock lock调用的方法。我们都清楚。这哥们儿前面讲过。
02:00
如果说在这个里面就看处还是first,那么也记它呢,一体两面分为两个,一个叫非公平所,一个叫公平锁,OK,也即我们lock是锁,锁的时间内叫圆的lock,圆称的lock,再进一步非公平和公平。那么这两个所其实质而言都是。C口这个类来使用和决定,而C口这个类我们前面给大家介绍过,他自己呢又继承了AQS,所以说这两者会扯上关系,那么AQS最终而言又封装成no的节点来保证请求的线程来进行排队,所以说他们的关系就是一张图,意图胜千言,希望各位亲能够扎实的理解这张图。好,那么接下来。就跟刚才我们这所画的OK aqs里面包含了的节点,那么大家那看一下源码都明白,那么接下来我们呢,叫对aqs重要的参数。
03:09
和对应的类来进行剖析和细度的讲解来吧,首先来说AQS自身,AQS里面有一个内部类叫no,那么就说他们两个的关系来吧。首先。As有一个int类型的变量叫state,这个非常重要,那么对于我们而言,大家这个aqs它呢?有一个int类型的的变量,再次强调啊,这个叫的是属于aqs的,那么只要有一个变量,100%会有get和set,所以说在这儿这个先要把它拿下,混个眼熟,到后面我们一定会反复的跟大家强调这个状态位的变化,那么这个状态位结合我们刚才的抓图,就是这个state状状态位零就是空弦一,或者说大于等于。
04:08
大于零了以后,那么就说明什么,有人在占用啊,好了,那么这是第一个变量参数来,也就是代表是AQS的同步状态,Data成员变量,它决定的是A当中它这个snchization的好,那么它呢,类似于去银行办理业务的受理窗口的状态,如果等于零,没人自由状态,空闲状态可以办大于等于一,我们有人占用着窗口等着去哪儿等着去,那么自然而然,其他的是不是要去银行的等候区,候客区。坐在那个no的那个节点里面那个椅子上,这个请求客人,这个请求线程给我等着好,那么这个是第一个变量。第二个X的CLH队列,那么说明了这个介绍了啊,这个队列它怎么弄起来的呢?那么大家请看头尾前后四个维度,并且形成了漏斗节点。
05:07
组织起来形成了队列。所以呢,大家请看。C队列,三个大牛的名字形成了一个双向队列啊,那么呢,我们呢,也已经。看过,那么这边我们把这个源码的。官方解读再给大家说一下,首先它这个等待队列是一个三个科学家拼起来的,那么请看通过什么spin locks自选等待,然后这儿有个data变量判断是否阻塞。请大家看它呢,从尾部入队,从头部出队,那么这个就是我们aqs啊,这是不可能错的,官方的文档做给大家的介绍,那么把重点部分都给大家翻译出来。那么通过state变量判断是否阻塞,没有阻塞哪个强道就去用阻塞了,入对给我去等号好,那么队列尾步入头部出都明白,那么这个呢,就是我们银行候客区的等待顾客,那么小总结我们会明白。
06:17
有阻塞就需要排队,那么实现排队了必然就需要队列,那么在这个队列里面就要把这些等待唤醒通知机制啊给大家管起来,所以说aqs的实质就是CH的双端队列加一个类型的变量,这个非常重要。
我来说两句