00:00
各位同学大家好,我们继续通过上一讲,我们会明白,所谓的aqs啊,实质而言,它就是一种抽象的队列同步器,它的作用是干什么呢?主要来保证。在进行等待的时候,后续现成的通知唤醒的一种机制啊,也就是说通过我们的维护state变量的状态,比如说啊零的时候,空闲资源空闲,谁都可以来用,群雄逐鹿,谁抢到就是谁的,那么可能这个状态state变成了一或者其他值,那这个时候。有人用的时候,那么其他等待队列将如何被唤醒,如何来保证所的分配呢?那么根据我们前面所讲,每一个啊,类似于来银行办理业务的请求的线程,也是每一个顾客将会坐在椅子上,就是我们这个漏斗,相当于每一个请求线程被封装成no的对象,进入到这个aqs队列里面,那么aqs队列实质而言就是CH队列的一种变种,那么它呢,来达到并发控制的同步效果好。
01:08
那么开始一点点接触一下源码,首先我们来看一下源码AQS啊,我们前面说过了。我们前面使用的很多类都。跟他有千丝万缕的关系,那么他又如何实现的呢?来,同学们请看。源码,首先内部它又有一个什么漏这么一个类,还记得刚才我们所说过,每一个请求线程都会被风装进漏。就是蓝框框第二个头指针为指针队列嘛,再直白一点,双向队列第三一个我们说过是不是叫in特类型的,大家请看,加了可见性绝对可以保证,只要一变马上就通知大家有这个变量,是不是有set get方法,OK,那么来,同学们可以大致的简单的看一眼啊,那么来。这个呢,是我们的。
02:01
抽象内AQS啊,这个AQS里面又封装了一个静态的final class,叫node节点,那么至于说这些里面的一些细节,我们后续聊,但是在这儿大家请看那么等待队列的noe class对吧?那么就告诉你了,这个队列里面装的就是一个一个的noe,那么这个noe里面来各种状态的属性说明这先。提一嘴,这个就叫wait,叫等待的状态,和我们待会儿要碰它的这个啊,稍等。这个注释太长,我先把它关闭一下,既然看到了,那么不妨我们就。直接先说一下。好,那么同学们啊,请大家搂一眼,嗯,在这儿我们会发现。在AQS里面有一个node,而这个node里面它会带这个状态叫wait status和我们AQS的这个state是两个不同的值啊,在这我们先给大家呢先说明白,那么注意。
03:04
Aqs,这内部有个类叫node,而这个node大家请看头指针尾指针,这有个T,这个就是我们刚刚所说的。这个状态位。但是在node里面呢,又有一个它叫wait,也记一个是AQS的,一个叫weight,是no的节点的,但是这个no的节点又在aqs里面,它也是个内部类,好,那么从这我们可以看得出。一。X的里面真真正正封装干活的是漏斗节点,第二个头指针为指针,说明它是个双向队列,第三一个我们呢,可以看得出S,注意这个是什么同步状态的标识啊,它是AQS类里面的。那么有get set,那么是不是也是一个变量,有set get方法好了,好,那么这个粗环也过一遍,然后源码给它做一下说明。
04:06
A呢,它使用一个V的int类型的成员变量来表示同步状态,最经典的int类型的值默认是零,零就代表现在是资源没有被线程占用,是空闲状态,比如说一就是被争抢状态啊。那么通过内置的这个队列来完成资源的获取排队工作,将每条要去抢占资源的线程封装成一个什么no的节点来实现所的分配,通过CAS完成对C塔值的修改,那么所以说这个就是它。搞定的事情,那么最终给大家总结一下,就一句话,AKS同步队列的基本结构,那么来吧。你先记着这张图,后续我们源码分析的时候,大家会一清二楚。首先。队列同步器。投指针为指针第二个,每一个请求线程都会被封装进no的对象,形成一个节点,进到这个A队列里面进行排队,那么头指针指是谁,为指针指是谁?节点和节点之间形成一个队列,先进先出,他们通过。
05:15
前指针和后指针,然然后来进行我们相关的队列构成,那么大家统一的来看着资源的C塔状态位。是空闲还是使用,那么。如果被占用,大家排队,如果空闲,在队列里面形成新的通知唤醒机制,挨个挨个的再去占用资源,所以CH队列它呢,提一嘴单向的,我们这儿呢,C aqh是CH队列的一种变种,虚拟的双向队列fio OK,好,那么同学们对于AQS的入门级别的理论知识就给大家介绍到这儿,一中。难,那么第一部分突破,接下来中等难度,最后是我们的源码分析最难的。好,请同学们大家加油,一步步跟着下来。
我来说两句