00:01
好,那么各位同学,我们接下来来看一下。回到我们上一讲。我们呢,讲解了公平所非公平这些东东我们不再重复累赘,下面来看一下。Java的还有这么几种锁,其实这几种锁表面上看Java有15种锁之多,其实有些是重复的,比方说我们彻彻底底讲过什么可重入锁,是不是又就等等同于递归锁呀?这两个是121222的事儿。那么下面我们来说一下独占。和共享那么OK,比如说现在我红蜘蛛屏幕共享。所有同学你们在读杨哥的屏幕,那么这个就是共享。但是抱歉,这个讲台上有且仅有一个老师在讲,比如说现在这个鼠标,我向右,我向右滑动,一个车是不可能有两个方向盘的,那么写操写操作,那么就是独占,那么换句话说独占锁也就是写锁。
01:01
共享所也就是独所。那么所谓互读和写。以及。写写读读读写读读四种情况,那么牵扯到后面的互斥,那么好,我们简单的来看一眼。首先。独占。该锁一次只能被一个线程所持有,我现在去卫生间了,门栓一拉,那不用讲这个开,这个房间只能被我一个人占用,那么我们前面讲的re lock和S而言,都是独占。第二个共享,该所可以被多个线程所持有,再说白一点,我们现在正在上课,我一个人在讲课,这就是什么独占,但是所有同学,你们通过红蜘蛛屏幕共享软件,大家都能看到我的屏幕,比如说我现在这这条高亮显示啊,那么这个就是我们的共享。好,那。我们现在又多了一个所,Re en read right lock么?其读所是共享,其写锁是独占。那么言下之线。
02:06
我们都明白。以前呢,我们是从size。干嘛呢,过渡到了。我们的洛克。好好的,加了一把锁,挺好的。但是抬头请注意。现在会出现这样一种情况,比方说现在我们要求同学们签到。我把所有名字贴在这张墙上。来一个同学,你给我签到,但是你一定会看到这样一种情况。假如说张三这个同学在最下面写自己的名字的时候,上面可能已经有100个同学的名字了。那么炎下肢一定会出现一种同一种情况叫什么?我在写的时候。也希望跟别人共享读,大家同意吧。那么大家请看哈,我这儿假设现在。张三李四他们俩已经签完了,他们想找找自己的名字,看看自己的考题。
03:05
这个时候他们已经在上面,他们是不是正在下面站着看,没问题吧,那么这个时候说明什么?这一半这个墙面就当是个资源,内有两个线程在读,但是抱歉,我们为了避免写的时候出错,写的时候这支笔只有一支,它就像加一把锁一样,那么这个时候是不是它只能是独占,他没有办法共享,这一步能跟上。那么言下之就变成什么看三在签自己的名字,李四在旁边看自己的名字啊,这就导致什么一边读。一边写,那么这种业务情况,我们要第一个要保证同时发生,第二个要保证读的线程。不互斥,是共享的,但是写的那个线程是互斥的,是独占的,同一时间段只有一个人来写,总共两步,同学们能跟上。好,那么言下之意什么概念呢?以前我们家洛克。Lock就是我说的上卫生间,我现在去卫生间了,开门进去,拉上门栓,Lock用完了,按lock解锁,我出来。
04:08
那么为什么?我们这儿。又会有一个新的东东呢,Re read?蝎所。以前的洛克干嘛?只要你加了锁,我不管你是看还是,我不管你是写一句话,只要有一个线程占了,别人不许动。这个东西就归我。但是我们想过。有一种业务场景就是签名,我需要同时看的时候,有人同时在写。言下之意,看的归看的,写的归写的,这个是不是就是我们前面讲过的读写分离?那么好这样一个好处,什么?进一步细力度的控制这把锁,我们的什么既保证数据的一致性,又保证了什么并发性好,那么接下来。我们呢?直接来看一个案例,杨哥讲过,你学任何技术三板斧,第一个理论,现在我们的理论是什么?
05:06
读写锁。注意以前加的锁,我不管你是读还是写。有且仅有一个人来到。只有一个人的时候,不用讲数据一致性是不是肯定可以获得保证了。但是你想哈,现在就好比你去。火车站,你去航空公司。屏幕上某一个列车几点几发,某个车几点到达,在哪个门出,屏幕上的东西是不是应该是多个人可以共享读正不正确?那么这个时候是什么?如果你只加传统的落考,你想一想火车站的通知屏幕只允许一个人读的话,那我认为是你数据一致性绝对可以保证,因为这个东西只有一个人来操作,但是你的并发性是不是急剧下降啊?那么这个呢,是绝对违背我们的业务初衷的,那么好讲过,回到这儿学习三板斧理论,我们现在学的知识点是什么,读写所要求你。
06:00
一边能读,一边能写,而且读和写还互不影响。那么第二板斧,什么?你读完书了,很多同学为什么他的技术没有办法成长和精进?他只是他也愿意学习很多九零后我教过这么多学生,我手下过了4000多个学生了。晚上回去呢,也读书。但突然发现,你读完以后一定要有第二板斧。80%的九零后回去是不读书了。没办法,有工资了,回去的话呢,现在欲火焚身,是不是开始买装备了?那么这时呢,晚上打两把吃鸡王者的话冲冲。基本上呢,没时间好,第二个你读完以后,你一定要把你的知识点用代码证明。如果你没有用代码写过你这个书读的是什么,基本上也就只不过记住了一大堆正确的理论,但是你根本无法融会贯通,运用自如。第三板斧。你把你的小case小代码写通了以后,建议传到百度云盘或者getup上面的自己的个人账号,假以时日形成你自己代码库的积累,那么这个时候就变成一个什么小总结,小积累,所以说你学it没什么窍码,只有三个理论编码小总结好那么接下来。
07:11
我们自己来看一个案例,我们来写一个读写所。多个线程同时读一个资源类没有任何问题。我们讲过了,现在干嘛。多位乘客现在在首都国际机场看一个资源内就是广播的通知,电子大屏,各个航班的离港和到达情况。那么这个时候为了满足并发量。可以同时读。读取共享资源应该可以同时经营,我们这么多位同学,我们现在去首都机场,我们去看电子广告牌的通知,是不是应该可以共享读没问题吧,你不能说这个电子广告牌只能有一个人读,那就崩溃了,这么多游乘客,那怎么办?但是如果有一个县城想去。什么操作写共享资源?什么叫写共享资源?突然你会听到广播,尊敬的各位乘客,我们抱歉的通知大家,原东航13467号航班登机口从53号登机口变更为17号登机口,你懂的,这种变更登机口的行为是不是只允许航空公司内部人员一个人来改?你不能说每一分钟这个登机口换一次吧,你打游乘客当猴耍呢?
08:19
天天从53号门跑到17,又从17更换到18,而且更恐怖的是什么?有多个县城来更改这个登机口,变更相关事宜的话,那我相信这个乘客会疯的。那么好,所以说什么?读,多个人来读,共享写,只允许什么一个人来写。也就是说。读读能共享,或者叫共存,读写不能共存,写写不能共存。好,这就是我们的读写所得相关的理论知识的讲解。
我来说两句