00:00
好,同学们,通过前面的分享和讲解,我们已经将AQS的理论知识。从基础理论到它内部的体系架构的代码体系,全部做了一个通用的说明,那接下来我们就攀爬另外一个高峰。完成我们aqs的底层的源码解读,也是本章最重最难的知识点,请同学们务必做好准备,而且一定要跟着我把它理解清楚。我会深刻的告诉你到底这张图什么意思,你现在我相信你肯定会觉得懵逼的。如果我现在就告诉你,所谓的AQS就是一个状态加一个队列。这个只是公式化的记忆,你这样去跟面试官聊的话,你的内功底子是不足的,那么我要告诉你怎么形成这么一个东西,他的这个。加完锁以后。他的等待通知唤醒机制是怎么协调工作的?另外你怎么写一个队列,完成以后你会对加锁。
01:06
解锁、超时控制、数据结构的链表设计模式等等等等,都有内功的完全提升。听完这个源码解读以后,我不敢说你立刻会变成什么牛逼的高手,但是你的内功一定会被我逼出来。请大家做好吃苦的准备。这是第一个。第二个。在学习方法的过程当中,我们一定要选我们最熟悉的作为一个突破口,好,我们现在呢,从我们的的look开始解读这个aqs啊,因为啊。天上飞的理念必然有落地的实现,熟悉杨哥的都知道这是经典名言,那么我们要学aqs啊,既然这几个都跟as有关,那么我们照着一个角。去打,那么自然而然就可以把它拿下,那么我们在这儿就以我们最常用的最经典的原程的lock,可重入锁的lock,按lock方法那么来实现我们的程序,来看看我们用户API级别的lock,它的底层需要你具备哪些知识,你才能有资格去应聘阿里P6P7这样的岗位。
02:16
另外体会一下杨哥所说的什么叫API调用工程师为什么不值钱?好,同学们,我们走起。洛克接口的实现内基本上都是通过聚合了一个队列的同步器的子类完成线程的反问控制,对于那些加锁和解锁的线程,什么意思啊?同学们都清楚,我这块一点开以后,是不是可以把这句话说明白,任何一个lock,但它是不是实现了这个lock接口嘛,就是这个意思。它内部都是聚合了一个队列同步器的子类,也就是我们这儿的SYNC这个类。来完成我们进一步的所的操作,何以见得,同学们请看。
03:05
我们在用户层面。最外面暴露给用户用的都是洛克。洛克,洛克,安洛克,那么请看这个洛克叫什么?是不是调的是C这个内部类的洛克方法再来,那么这个安洛克呢?你看是不是也是调的S这个类的release方法,OK,那么所以说我们就会明白,表面上我们调的是h work,实际上而言我们调的是C考这个类,那么这个类是哪来的?这个类是它的一个内部类,而这个类又继承了我们的。Abstract。Aqs的。抽象对立同步器好的,同学们,走起,我们来看看re洛克的原理。它它的架构前面已经详细的讲过了啊过那么。接口实现类,这个类里面有C考它。继承它,完成我们的公平锁和非公平锁。那么接下来我们从最简单look方法看看公平和非公平。熟悉勾C的同学都知道。
04:10
我就写这么一行,从构造方法这个层面而言,默认是公平锁还是非公平锁?OK,大家思考一下。我们都清楚默认是不是一个非公平啊,我们最常用的为什么一点开源码,请看这是一个非公平锁呀,因为我这儿看着他的说法就是创建了一个原传的实例,这个就等价于你里面传了一个什么force force就是非公平清楚啊,那么你这不传或者传一个。False的意思都是非公平数,OK,那么如果说我这传的是处呢?跟刚才一样也跳到这,如果这是错一个三目运算符,返回的就是公平数,如果这传的是一个false,返回的就是一个非公平数。
05:00
好的,那么接下来我们源码看了以后,看看我们的脑图笔记。他有这两个新有。公平和非公平也是在这个里面,这么说能跟上,那么这儿我们可以找找。最上面的源码,那么大家请看啊。我们在这块以后,这块是不是叫一个C,那么在这儿think考的以后,它这个里面你看是不是有一个非公平的,这有一个公平的在哪个类里面,也在这个可重入类里面,它们两个也都继承了C口这个类,那么自然而然也是跟as有关系,好那么我们这儿就会清楚。如果说不传默认就是非公平,传了以后,刚才也走过源码看过,就这些。公平非公平,默认创建非公平,这些快快的过,那么公平和非公平他们两个。怎么来获得锁呢?走起这两段。
06:01
大家先看一眼,有什么区别和不同。搂一下,是不是只有红框框这么一个,所以非公平所叫非公平的try acquire尝试抢占。而公平的叫try acquire,那么它们两个几乎是一样,左右几乎对称,90%代码都一样,唯一区别就是公平锁,这儿就有一个是吗?来判断队列里面有没有排队的,因为公平锁嘛。好,那么同学们。我们来看看这个是不是个落考。怎么来的呢,这段跳到这个呢,C的look方法,哎呀。他也是个抽象类的那。杨哥,你是怎么获得这大坨的?那么碰到这儿?跑到这儿。找到我们这个洛克,你看是抽象的,说明什么?一定是要被继承,被此类,那么这个洛克方法有哪些被实现要。
07:00
公平的要非公平的,本次啊,我们以最通用的非公平所作为切入点。点进来请看在这块以后它是不是有一个look方法。如果你。抢占的大。或者说是抢占不到,都会走对应的分支流程,那么来我们这儿有一个acquire,那么在这有个try acquire,大家看这又有一个,我们先点开,先带着大家先过一遍。那么抖起。你看这是不是有个非公平的TRY块,待会我会带着大家慢慢的过,我们先混个眼熟,告诉大家怎么找,这些是哪来的,那么同学们请看。这个是不是非公平锁?OK,就这么一步步过来,细节待会儿我们再说。那么。节约时间。我。已经把它抓好图了,简单一句话。非公平所就叫这么一个名字。公平所就叫穿和宽,它们两个的唯一区别,那么就是我们刚才在红框框所看到的这有没有这么一个队列来判断好的。
08:12
多了一个限制条件,有这么一个,它是公平锁,加锁的时候判断等待队列中是否存在有效节点的方法,就看看我前面有没有人排队,因为公平锁就是先排先得嘛,所以呢,你点开以后,它呢就这么一点,那么我们完成了。整个的A的源码分析,你再去看这块应该是不在话下,所以呢,作为一个家庭小作业,大家呢可以去看看。好的,那么我们现在开始进行我们非公平锁走起。方法。刚才看到了他们两个呢,这个实现代码,那么哪来的这个什么TRY什么的啊,就是我们在这儿。大家刚才看到的啊,非公平。
09:00
点开这这一波一步步的过来,待会儿我们会讲啊,那么非公平就是少了这么一个判断,其他都一样啊,他们两个的区别就这么一点公平锁。是讲究先来先到。在获取锁的时候就会有一些偏,谁等的时间长对吧,谁会更优先的获得那么非公平锁,那么就是我不管你有没有等待。干嘛,谁先抢到谁就立刻占有这个锁对象,OK,好,那么所以说啊,我们在这儿呢,分两只啊,如果你是公平锁,它走的是。这个如果你是非公平锁走的是这么一个分支啊,这个我们刚才看到了,你明显感觉到是不是非公平锁是右边这个代码多一些,所以说我们走这个难的,那么接下来我们都会清楚创建完非公平锁啊,我们这就说会调用lock方法。那么进行最终他们两个都会调用acquire这个方法里面刚才粗略的带着大家走了一遍,那么最终你看这是不是有。
10:03
Try acquire,又有这个,有这个下面的解读,那么就是对这些方法进行深度的讲解,OK,那么好,同学们,我们走起。本次讲解我们走最常用的落按落作为案例的突破口,源码的解读比较困难,我明说了,你听着听着你可能会开始会懵逼,听不懂了,你是你呢?再听不懂的时候,那么这个时候先暂停一下,理理思路。别着急,最后杨哥给大家做小总结的时候都知道理论实操小总结全系列脑图会给大家做好这个笔记,你AQS的源码深度分析全套下来,那真的是很难的,所以说大厂考的非常难,你不要觉得这个简单,你以前查过的什么帖子,或者你只言片语你都了解一下,你可以把它扔掉了。跟着杨哥来,为什么?你真觉得as很简单吗?来吧。
11:01
整套体系表面上可以分为三个阶段,尝试着加锁,加锁失败以后,线程进入到AKS队列,线程进入到AQ队列以后,进入阻塞状态,然后等着被叫号,再从阻塞的状态恢复。好像好简单是吧,那么你看看啊,这儿我们一来来的,我们先啊一点点带着大家玩一把,这个是不是我们先创建了一个处,代表是什么公平的,那么现在取消是不是非公平锁,那么我这一个落卡,我这儿是不是一个落卡。我这儿找的是非公平的,那么最终它会走到这儿,走到这了以后是什么的try acquire进来,那么现在我们找的是谁非公平锁,那么再来一步步什么打着断点或者说走着这么流程进来啊。貌似你好像觉得也没什么,别着急喽。刚才我们是不是圆圈的洛克,到洛克这个里面是不是叫洛克这个,大家看是不是刚才见过这样的代码。
12:03
那么他有多么的啰嗦和麻烦呢?大家看一下。三大块我先给你放小一点啊,你看看他有多少流程需要你全部整明白,你知道为什么大厂爱考aqs了吗?你要像杨哥这样能够把这些流程源码整明白了,你就一定能够精通高并发,那么这是第一组。那么try acquire方法。那么刚才是不是稍微。见过一下这么一个东西,这一波同学们你看try acquire,对吧,就这么一个方法,你看看这么一大坨,有这么多类,这么多流程和步骤需要你去了解。OK,第二个。完了以后,这个是走左边这个分支啊,那么走右边这个分支呢,同学们请看这是第二组,那么如果没有抢占的道呢,怎么形成队列,怎么排队,这是第二组,那么第三组抢占到了后也排着队了以后第三步怎么挨个挨个的去全部给他办理业务,那么所以说同学们。
13:05
怎么着,这些是不是才是真资格的最难的东西啊,所以说你不要浪费时间了,你认为你花的那些查帖子那些时间,不如跟着杨哥好好的把这些流程跟着我打断点,跟着我走圆码走一遍,这些东西真的挺难的,所以说呢,比较困难,那么甭着急,后面给大家分享资料了以后,照着我的流程分析一遍,你会深刻的理解高并发和。多线程让你的程序可以充分的在你手上成为时间管理的分片大师,听懂了吧,OK,好,那么。下面我们就开始正式走起。
我来说两句