00:00
同学们,我们继续这张勾UC,重点是一个题目aqs,它是勾UC的重要的基石,那么所以说我们挨个挨个拆解,讲GOUC就要讲AQS啊,讲AQS啊,它有一些前置知识啊,所以说我们先来扫出我们路上的第一个拦路虎,可重入锁好。那么下面。走起。什么叫可重入锁?又名地归所。我相信各位同学来大厂学院学习的话,基础知识肯定有了,我就不会和你解释什么叫递归方法里面调方法。那么什么叫可重入锁呢?我们这儿先说一个最经典最简单的case。那么同学们啊。在所的持有我们都注意,如果说啊,传统上而言。我们都清楚,假设现在有两个线程进来,按照先占先得的要求,第一个线程谁先加锁了,这叫占用锁。
01:05
只要强到锁才能进去干里面的主要的业务逻辑,外面这个线程没强到的,只能等着,等第一个线程释放完了以后出来了,那这个时候同学们你懂的,等我用完了,把这个锁释放了,它又抢到了,才能够获得有一个锁的。抢占有一个所的示范,这是一种情况,那么现在所谓的我们的理论要求是什么?可重弱,那么它是什么概念呢?意思就是说在某种情况下,可能这个程序有外层。然后呢,又有忠臣听懂了吧?然后呢,这个程序呢,又有内存。能理解,那么如果是同一个线程持有同一把锁的话。只要我能抢到第一把锁。第一次抢占锁成功了,那告诉我,我现在又碰到了第二把锁,只要第一把锁是第二把锁是同一个锁对象,那么我不用等着第一把锁释放,我可以直接获取,如入无人之境,否则的话,会产生一种最严重的情况,是不是死锁呀,所以呢?
02:20
先简单粗略的来讲,这个就叫可重入锁,也就是说同一个线程,只要持有的是同一个对象的同一把锁,它可以永远获得自己的好。那么这个时候同学们,我们往前走,来做一个简单的理论说明。从弱又叫递归索,它指的是同一个线程在外层方法获得所的时候,再进入该线程的中层或者内层方法,也就是从外到内的时候可以自动获取锁,就是还是自己持有的那一把,前提是这个锁对象得是同一个对象。那么举一个生活的小case啊。你们家最外面是不是有一道防盗门,没问题吧,那么进来了以后可能客厅有一道门,厨房有一道门,正常情况下。
03:07
你在客厅和卫生间的时候,只要进入同一个房间了,从外到内我们都知道,如果是这个屋子的主人回家了,我不用在卫生间厨房再上防盗门吧,你们家正常情况下防盗门是只有一把,就是最外层,这个只要你认为是。家里面的自己成员进来了,判断的是自己,那么OK里面就可以获得通行。所以说请大家看。它呢会自动获得锁,不会因为之前已经获得过锁还没有释放而阻塞,因为为啥我工作还没完成,我最外层强这个线程强的这个锁就是我自己持有的锁,我不用去示范。那么在Java里面,我们的re lock和size都是什么可重入锁后面我们会用代码证明。可重入锁的优点就是避免死锁,因为一般按照Java这个模块就是一个线程获得锁,必然要示范锁,但是我进去以后发现JA的锁还是同一把,那么加完GVM底层就认为这是同一把锁,这个线程不用等着你示范,可以继续放行,继续通行,OK,好,那么再来加深。
04:19
可重入这四个字啊,我们从理论上深刻理解啊,我们分开来解释啊,什么叫可,就是可以重,什么意思啊,就是再次入,就是进入所,什么同步所,一定一定要注意这个前提啊,重点同一个对象的所啊,当然如果你这是A。哎哎,洛克AAA没问题,你这要是三把不同的锁,洛克ABC那就不是了,听懂了吧,所以说必须是同一个对象。那么。进入什么呢?同步代码块的这个域里面,也就是说同步代码块或者是方法,或者是显示所锁定的这段业务逻辑代码。
05:02
相当于你进你的屋子。一句话。一个线程中多个流程可以获取什么?同一把锁,主机同一把锁,持有这把同步锁可以再次进入,明白自己可以获取自己的内部锁,不用等着自己示范,否则我,否则我自己这边要获取,要等着自己示范,这就什么,很坑爹,特别容易造成死锁,好比你自己用你自己的钱。还需要自己跟自己借钱吗?没有听说过用自己的钱需要跟自己写一个借条的吧?就是这个意思啊,所以呢,请同学们稍微的理解一下可重入索它的字面上的理论意思,那么下面要注意可重入索的种类,一般第一个think关键字啊,也就是这叫什么影视的锁,它是由GPM控制的,听懂默认它就是可重撞。Snchize有是显示锁,那么我是隐示锁,抱歉,那么lock呢,就叫什么显示锁,那么这种lock也就是什么叫显示呢?是需要你人工的lock,按lock是不是需要手动来写呀。
06:11
Snchize的同步方法和SNCH的同步代码块,这是由GM层面控制的,它的获取和示范,但是我们的洛是不是unlo这两个关键字啊,是不是要你写的,那么这样他们两个,一个叫影示,一个叫显示,好么?理论知识啊,就给大家介绍到这儿,接下来我们代码说话。
我来说两句