00:01
那各位同学上一讲,我们给大家介绍了是线程不安全的,第一个给大家证明过。我们都知道哈。你单机版的时候这个。没问题。多线程将会爆。这么一个错。并发修改的异常。接下来。怎么解决,我们详细的讲解过。第一种,而list的前身是不是有个东西叫VE,这个方法的爱的方法是加了synchize的,那么能加锁。他就不会报并发修改,因为加锁嘛,同一时间段只能一个操作。第二个我们给大家讲了collection接口。有一个collection is这么一个辅助工具类,它有个synchronized list。换句话说,可以。丢进去一个2LIST,把一个线程不安全的外面封装一层,变成一个线程安全的。
01:04
好,那。接下来。解决方案,我们上半年给大家讲了3.1 3.2。那么接下来的问题是。3.3。什么意思呢?题目变了。限制不可以使用VE和collection s的工具类。那么这个时候。你会怎么办呢?那么接下来。我们需要聊聊。Do UC包里面先给我们提供的一个类,那么言下之意,我们先老规矩解决问题再说原理。好,那么这个时候呢,我们将要熟悉一个新的类,在我们的GOUC。包里面。那么这个东东大家请看。
02:01
就是我们的一个。累。俗称。什么呢?Copyright?Every list。那么大家请注意。List肯定没问题吧?前面加了个copy on right,啥意思啊?这个就是我们要给面试官回答的。核心关键唤醒词,俗称写实复制。好,那么这个时候同学们我们先来看一下。第三种方法。我们就需要。这么一个洞洞那。我们把这个也去掉,尿。那么这个时候大家请看。过来。Goc包下面的copy onright list。那么这个时候同学们请看,我们先来看能不能解决问题。大家请看退出的扣的会零代表成功退出,不管怎么着,七三展呢,我们也可以看到没有看到。
03:06
这个异常了吧。那么言下之意,面试官就来考你对于并发情况,各种例子的使用的熟练和掌握情况,那么基本上这三个你都能答出来,说明你具备在并发下面。活的资质和基础知识扎实。那么这种情况下。你才带得动,老员工才带你玩。那么好。接下来我们就要闹了。为什么?加这么一个方法就OK。还是那句话。那我们说过一个东东干嘛。不要只是。会用。那么你只是会用的话,你只不过是一个API。调用。工程师啊。
04:00
那么坦白讲,底层原理呢?人家马上问你了。好,人家问你说那假设我想解决一下list线程。不安全的问题。用哪个,你说用l list肯定不对。但是。你说用你自己去加锁肯定不对,而面试官都不想跟你聊你的薪水,可能干个一两年,跳槽也就止步在15K。但是如果你能说出这个,说明你这个人是在不停的在学习的过程当中,那么你在笔试和面试我们讲过这个问题。真的你把那套卷子答出来了?真的你把所有问题都回答出来了,你就是高手吗?不一定,甚至面试官也知道。你就是笔试答了100满分,100分离你能干这个活还是有一定距离的,大家同不同意?但是为什么还要笔试啊?抱歉。你能把这些题目答出来,说明就算你是去背题,说明你这个人背的进去,说明你从大学毕业以后你还读得进去,说也即你没有丧失学习能力,也就是说笔试的意义不是筛选出人才。
05:14
必师的意见是过滤掉学渣。把这一波大学毕业以后读不进去书的九零后,坐不住的九零后。淘汰。起码我知道这么一个类。我背过也好,我看过也好,我学过也罢,至少你是一定要花时间的,否则你不可能知道这个东东。说明你什么屁股还坐得住,那么这波九零后筛出来,然后试用期大公司好好培养,用我们公司内部的框架我们讲过了,比方说我们学过的double。和spring spring cloud这是开源的大公司里面,比方说像五八都是用DSF,像阿里巴巴HHF内部版的double,他根本就不用。
06:01
那么这个时候干嘛就需要你基本功扎实,哪来的基本功?就是看你能不能够毕业以后还能读的进去书。当然你可以简简单理解为干嘛来上硅谷培训。好,那么听杨哥讲完以后,我们就得来看看了,你现在会用了。噜噜源码,凭什么这个类的爱的方法就能够控制得住呢?另外一个。我们的导致原因是什么呢?那么什么叫写实复制计数?注意后面同学不用记笔记。听好,严格的风格,管生管养,管杀又管埋,所有笔记都给你记好了,你不会有,我记得详细,到时候代码一发,兄弟们OK。那么接下来源码级别的掌握和调用先来看。现在我们看copy right list。首先,这货是不是也实现了list接口?
07:00
说穿了你肯定熟悉,那前面是不是加了个copy right这么一个前缀呀?那么来,首先兄弟们看一下。Venttile。Transcent,你看前面我们详细讲了V,现在你该知道你知道为什么了吧?在高频发的环境下面,基本上重要的核心变量都需要加钱缀,看你没用到,那是因为你所在的公司比较low,肯定也就是登山改查版本。那么这个时候你说我从来没用过啊,你没用过并不代表不存在。你的业务场景去过大公司干过吗?像杨哥这样的基本上都是什么过万人的团队和公司啊,那么所以说我们那些东西就用到过,确实需要人家这么设计出来是有道理的。来。讲过a list底层是不是一个object类型的数组,你看是不是还是一样的?那么再来对于这个变量,最标配的是不是叫set get方法?好,那么接下来。抬高。Egg方法。
08:00
那么二话不说。追加一个特殊的元素到这个list的尾部,好,要求同学们先把这段原代码看一遍,然后我们再来讨论,给大家一分钟课堂练习思考时间。哈哈。那么这个源码。同学们简单的看了一下。接下来我们呢,先不说源码。我们先回到这儿。那么呢,给大家来解释这个导致原因。好,那么各位同学抬头,我先以一个生活的case啊。举例讲完再带着大家讲解读这个源码。最终导致出。写诗复制和读写分离这种思想落地的这个技术好,大家请看。海涛。假设。今天我要求每一位到场的同学来一个人。
09:04
叫签到,这张就是签到表。这个就是手写笔。一下吃鸡。现在你可以把它理解为。我们现在是不是30个同学要签到?签到哪,是不是签在这张花名册上面,那么这张花名册就是我们的资源类list。来一个同学写一个,来一个同学写一个,这么说听懂好,那么正常情况下。干嘛呢?每位同学。如果说我们加锁,比方说杨哥在旁边守着,我要求不许带切,每一位同学,你告诉我切。几个名字啊?是不是只能签有且仅有一个就是自己的?第二种情况好,假设现在没有人在维持这个秩序,没有枷锁。
10:04
不好意思啊,将会出现,请看假设现在旁边的这位同学张强。他。先往这个list。签名字了,弯弓张才写到张呢。然后刘欢同学。第二个线程,第二个同学上来了,由于现在我们的list并没有加锁,这个爱的方法并没有加锁,听懂了吧,这个时候干嘛?突然刘欢同学非常粗暴的推开了张强拿过来。那么这个时候你懂的,张强正在写的过程当中,如果说刘欢同学去跟他抢,去抽这张花名单的纸啊。张强同学又在正在写,这个时候是不是在纸上长长的画了一一道啊,那么这种是不是就是我们的并发修改异常听懂?那么好,那么同学们。
11:00
说白了,我们应该怎么签?那么比方说张强,他才写了一半,他写这个张呢,还没签完呢,别的县程H1抢一抽,这张卷子是不是在纸上画了长长的一道,那么这个是不是就是我们的并发修改异常?那么接下来请看我们该怎么解决这个问题呢?不好意思啊,你这个花名册啊,有些同学想读,那么有些同学干嘛要写?那么来。我们呢,再来。处理这么个情况。首先我们要明白。干嘛,他叫?写实复制。主要是一种读写分离的思想。各位同学请看老师。先取了生活的case,签名没问题吧,再举实际的。案例最后我们源码解读三步,不要着急。
12:00
第一种。假设现在巴拉巴拉巴拉巴拉往里面有十个元素了。好,现在大家都。正在读这份名单。那么抬头。大家可以理解为现在好,各位同学杨哥上课没有名字上没有写进这张花名册的同学过来看看,那么这个时候。杨哥将会把这个。名刀。贴到墙上。这个是大家正在做共享读,听不听得到,那么请看这个,就是这一步,好,接下来张强同学来了。干嘛?笔只有一支,相当于说他现在比在他手上不允许别人抢,听懂了吗?他要加锁。他在写的时候,张强这两个字没有写完。不允许别的线程来加塞,来干扰,听不听得懂,那么这个时候他干什么?他将会。
13:01
把这一份儿。拷贝。这个时候写实复制,你看copy on right嘛,反过来是不是叫on right的时候它copy。那么也就是说,现在张强准备签名了,他将会把我们共同读的这份挂墙上的这份共享花名册。拷贝。然后干什么呢?在这。直接。扩容几个。正确一个我们讲过了,签名签几个人。仅签他自己。所以说在这块。他把张乾这个名字。写好。OK,那么张强现在写好了,以后将会返回处告诉大家各位同学,现在我已经更新了花名册。我们这个list。现在这个例子就是我们的of,听懂了吗?
14:02
我多加了一个名字,叫张强。现在贴在墙上的那个1.0版本作废,请大家用,已经带了张强名字的这个1.1版本,请大家继续使用,那么这时候跟我讲干嘛呢,请看。我们所有的饮料。将会从这断开,没人看了,马上写完以后。再来引用它这么说,听不听得到?那么接下来。如法炮制,以此类推,现在1.2版,那么又来一个同学,那么假设这个同学。是当钱,那么现在干嘛呢?钱有了,那么现在又来一个同学,是油花。他拿到锁了,拿到这支笔了,请问签名字他签几个?是不是还是一个,那么这个时候干嘛呢。
15:01
油画。跑这那么这时候一样,那么这个引用断开,马上签完以后再指向1.2版这个又有新名字的这么一个。新的能理解。好,那么同学们,我们再来读源码,这个时候同学们就会轻松很多。请看。知不知道为什么我们要讲GOUC了吧?你现在不讲GOUC属你还是说没事加锁就用S就行?行了,你根本读不懂源码,现在。洛克来,老规矩。Lock加锁,Lock啊,Lock,那么这一段兄弟们你懂的,是不是相当于这支笔,现在在张强同学手上,他准备开始写自己的名字了。过来。当前先get a。Object宿主elements。那么言下之意说,张强手上先拿到了这么一份还没有他名字的名单。
16:00
好,看看现在的长度是多少,请看啊,点copy of。那么是不是就是我们的拷贝干嘛老版本的。要在老版本的基础上扩容几一,因为张强现在是不是只签他自己一个人的名字啊。然后干什么呢?新的element,那么言下之意,Copy of这句话的意思啊,兄弟们,是不是现在就是这这一坨?能不能跟上,请看。New elements的L假设以前有十个名字,张强。十加一是不是11,那么数组下标的第11号名字啊,是不是写上这个一,这个一是不是现在写进过来的这个丹田啊。End of。This list加在花名册的最后面,没错吧?那么接下来干什么呢?Set,阿瑞,再把这个新的有张强名字的这个东宝,你有elements set回这个。
17:01
名单里面这个资源类里面这一步能跟上,最终张强跟大家讲,兄弟们。我写完了通知,系统可以来读,已经签好名字,有张强这份花名册了,听懂了吗?最终,张强把笔交给下一个示范所,整个过程,同学们明不明白了?那么所以说。整个过程说穿了。扩容一写新元素粘墙,然后赋值回去。示范所下一个同学来签,以此类推。这一步,同学们能不能跟上?好,那么。来,最终请同学们干嘛呢?现在这个导致原因是不是就是我们的什么东东。并发。真抢。
18:02
修改。导致的,那么呢,参考我们的什么。花名册。签名情况。一个人。正在写。另外一个同学。过来抢夺。导致数据。不一致异常,也就是我们的什么并发修改异常,同学们秒倒。那么好,最终。我们用它。来,同学们。老师已经把刚才的内容给大家进行了粘贴和讲解。那么来。同学们。一页来看看全部的内容和源代码。好,那么同学们这个时候。
19:00
看看写实复制到底是什么意思,给大家一分钟课堂练习时间。好,那么各位同学,这个就是我们对应的什么,写时复制相关的源码,还有它的全部讲解,那么扩容或一个哈,那么所以说copy right容器也是一种读写分离的思想,读和写不同的容器。坦白讲,干嘛没写完的时候还没有返回错?我们。上一个写完了,我们用新的,那么这样是不是读和写分离呀?那么这个就是我们对应的一个对list相关的一个讲解。那么这个呢,笔记呢,都给大家写好,到时候源码一发,大家呢均可以获得好,那么对于的这个线程不安全,我们先给大家介绍到这。
我来说两句