00:00
各位同学大家好,我们继续通过上面的讲解,我们已经完成了三洛的上半场,完完全全可以替代我们的可重入的读写所,对吧,至少从功能上啊,当然一些细节待会我们再聊。那么也就是说这个有的功能它是具备的,那么接下来我们就要看看,读的过程中也允许获取写锁的介入它的一个新功能,刚才我们已经给大家演示过,你正在读取,就算说这个。写线程。他已经虎视眈眈的进来了,但是不好意思啊,乖乖的给我等着读,所为示范写锁拿不到,OK,好,那么传统版本的也是完成,那么接下来我们就又要有一个新的功能介入,那么就是乐观读。OK,好,那我们在这儿。这是悲观。这是乐观读,那也就是说我们在这儿。
01:00
所给答案。说明到。读的过程中也允许获取写手介入,好,那么同学们看看它们各自的功能和威力。那么搁到这儿,我们先回到我们的API,要给大家介绍两个新的,一个叫。那么也就是如果自发给出给定标记后未完全获取所则返回处,啥意思呢?就说来看看啊。有没有改?如果图章代表当前持有的所,则始终返回处。意思就是说我们这个。读的过程当中没有人来动过,我很乐观,我们也乐观成功了,说穿了就是反回,错就代表没有人修改,First代表有修改,那待会儿我们就来做这个判断,这个方法就很重要,如果是错,没有人修改,好说,如果是false,说明什么有人动过存在着我们在读取的过程当中允许写索进入,有人改过了,那么本次操作放弃,马上从乐观读。
02:03
变更为悲观读,OK,然后呢,重新从乐观读升级为悲观读,重新再读取一次变量,OK,好,这个是我们的一个valid,你就记着返回true,就代表不修改。那么第二个方法呢,就是这个try a party mistake read。那么也就相当于我们的禅是我们的,是吗?乐观读,OK,好,那么我们总是很乐观的认为,暂时呢,没有人来修改,来吧,那么同学们。接下来呢,我们呢,就要在这个读的过程当中介入我们的一个新方法,那么也就是我们的是吧。乐观读好了,大体上有前面的基础,也不难啊,我们再次强调,我这故意停四秒钟,就是说我要在读的过程当中,允不允许写索的介入,要给大家呢进行演示好了,那么在这儿和刚才呢,也差不多,来吧,我们慢慢写给大家呢,写清楚,呃,首先呢,这个时候呢,就是STEM。
03:06
OK。第二,Try optim。乐观读点,那么这个时候呢,也是我们的一个戳sta,那么这个时候它呢,相当于搁到这,那么现在in result,那么就是我们的number,我去读的过程当中,OK,那么也就相当于说假设啊,这就是37,好吧,那我们先拿到,因为待会我们好演示。我们想干的活呢,就是故意啊。间隔四秒钟,然后呢。很乐观认为。读取。中。没有。其他县城修改过。Number值。Number的值,那么当然。具体靠布尔判断,OK吧,好,那么这个时候干嘛呢?
04:02
我们呢,就过来吧。嗯,就这样啊,这一段呢,暂时先不用了。走到这。我们想写的就是。四秒前。这个我们的戳记啊。点,刚才是不是说过very这么一个方法?这个四秒前,现在说我们先拿它来判断一下这个值。这个方法。值。那么我们的效果是这样的,错,如果是返回,那么就是无。修改force,那么就是说明什么,有人动过?OK,好,那么上面呢,只是为了弹出来,并不需要那么。我们在这儿要完成的动动作呢,就是。这个戳气。戳记所点very date,那么哪个戳记就这个,就拿这个流水号去验证,OK,那么我们这儿就是四秒钟前,比如说我进来的时候,我先取一次啊,我们先看看啊,对于这个戳击目前肯定是没人动过嘛,无修改对吧,初始化的时候,那现在来吧,搁到这和前面一样。
05:21
还是四色?然后一秒钟一次在这儿OK。然后呢,我呢想干的活呢,是这样。那么当前这个线程啊,就是我们的独线程,那么它呢。和之前一样。正在读取。好了,那么现在第几次啊,对吧,正在读取,比方说第多少多少多少次,OK,然后完了或者是。正在读取,那么比如说。一次就是一秒,一秒就是一次啊,你叫次或者叫秒都行,多少秒。
06:01
后,然后我们再把这个。过来。我们再来验证一下。这个的池。来吧。他呢?完活以后。也就是说每一秒钟我就来调一下这个戳题的方法,就告诉你第几秒钟的时候被改过,当然我这是故意写的啊,相当于说这个读线程正在读取一秒,两秒,三秒,每一读一次啊,我都来。验证一下这个戳记的true和false,如果是错,不修改first就是有修改,OK,好了,那么在这块请看具体。靠判断对吧,那么。OK,这个负完成以后,那么接下来我们就来验证这个戳气。到底是什么情况?来。现在。
07:01
True是无修改,听懂副是有修改,那么假如说啊,我们现在。是处,那么说明无修改取反,这个force是不是不用进来?那么说明什么?我很乐观的,这四秒钟没有人。去修改,就算我允许你这个写的这个权限进来,但没有人动,我很非常非常幸运,我这次偷鸡成功,乐观成功,那么所以说。我们这就可以获得知道为什么这有个result了吧,那相当于说我们这儿就是。Finally value,那么相当于说你很厉害喽,这次那就没有人。修改了,你允许别人进来,但是别人没有进来,修改OK,在强调错,无修改说明一切顺利这个错。然后整体。取反force就不进来,所以直接把我们的这个值打出来,OK,但是大部分情况理想丰满,现实骨感,那么假设啊,这个副有修改呢,这个副说明有修改撤,那么抱歉,我们马上要进行所得变更,那么所以说我们这儿。
08:11
想给大家。说的是就是说明有人动过,就是有人修改。对吧,那么。有。写操作好了,那不好意思啊,这次乐观。失败了,OK,那么重新来你干什么呢?我们三了。Lock点怎么着,Read lock注意是不是迅速从乐观又恢复成我们悲观对吧,那么这次再动过了,那么不好意思啊,我呢,也就跟。以前呢一样,你们这个戳级流水重新来喽,OK,那么来了,那么try catch finally。好,写短一点啊,那么你要锁的话,我把这个touch先去掉,那么好,那你留着也行啊。来了,那么下面的问题呢,就是。
09:02
我要干的活就是。从我们的这个。乐观锁。升级为。悲观。读。OK,从我们的乐观读吧,或者说是都对应起来吧。升级。为了我们的。悲观读,那么所以说。就等于我们的。Number OK,那么现在有人动过了,那么你这个number是多少啊,返回给我们的。Without,那么好了。搁到这儿,那么就是。重新。悲观图。好。那么现在你这个解释是多少?OK好了,那么这个finally,那么也就是我们的。搁到这儿,又是安洛克。
10:01
RA的同样的脱节。丢进来,OK,大致完成好。那么同学们,我们接下来。来进行一下我们的修改和动作,那么这一块我先将其注掉,那么给大家验证过这个是我们之前的什么。传统版OK好了,那么这个呢,现在呢,是我们的新版本了,那么和刚才也差不多啊。还是有一个。读线程我们来读,但是这个时候读就有讲究喽。我们来给大家演示啊,假设两秒钟。我这儿读几秒,我这个乐观读的时候,是不是故意要去读四秒钟啊,那么当然此时我这个读方法,那么是不是就要变成TRY这个方法。之前是传统的读,现在是我们用一种乐观读,OK,那么这个读线程就是我们的乐观读的这个线程好两秒钟。
11:03
那以后。怎么着写线程就想进来修改。来,那么传统版本读没有完成写是无法介入的,那么现在我们看啊,两秒钟以后写线程,它是不是就过来介入了,OK,那么所以说。暂停这个两秒钟的时候,大家请看。那么。读。过程。可以写介入,那么。演示OK,那么相当于说同学们来看一下我们这个效果和判断O不OK。来吧。运行一下啊,这是乐观图,大家请看啊。我们现在拿到的是。四秒以前我们的是处没人动过吗?然后呢,零。第一次是错。
12:00
一秒以后是初二,因为前两秒没人动过,但是抱歉,请看。写线程进来,韩明马上写线程,准备修改,修改结束,然后这个时候。第三秒将你这第第二秒的话再去读first怎么着有修改过了,那不好意思啊,我这次的数据那么只好重新读,也就说我这儿。如果你要用乐观读的话,一定要有这个判断,那么最后输出的时候判断一下,看看你这个戳记有没有人改过,那么有人修改过,有写操作从乐观读升级为了什么?悲观读重来一次,那么重新悲观读以后的结果是多少?50,因为写线程是不是改过了,所以说读线程它最后的值也是50,那个37就作废了,OK,好,那么同学们请看啊,那么假如说。我现在是六秒钟啊。那么。在这块呢。这是演示啊,几秒六秒钟的。
13:02
读过程可以那个六秒钟的情况啊,那么也就是我们那个它没有介入,那么大家请看啊,我们呢,现在六秒钟以后,现在读线程是不是很乐观,乐观所通过错没人改,第零秒第一秒第二秒第三秒1234这四秒钟都没有人介入,所以说我这个读线程拿到的是多少37,那么。六秒钟以后写线程进来,写线程结束,写线程完成工作,对吧?所以说这就是什么乐观通过的情况,而上面这种两秒钟的时候,那么说明什么乐观没有通过的情况,OK,好,那么同学们,这个就是我们对什么乐观所相关模式代码的讲解。
我来说两句