00:00
各位同学大家好,我们继续理论完成。接下来如果这三种模式,我相信纯粹的理论你还是有点懵逼,别着急,都清楚,高级编嘛,理论实操小总结,所以说激动的心,颤抖的手,Java编码手牵手,来吧弟兄们,代码说话一写完,什么都明白了。开工。首先。你要明白3BLOCK是对它的一种优化,优化在什么地方,读的过程中也允许写所介入。好,那么下面三种模式给大家演示传统的读和写,它跟我们的读写所一样,主要是乐观读好了,来吧。我们这儿呢,做这么一个案例啊。嗯。Number。等于37,我随便乱写的啊,你可以这个,呃,叫什么都可以啊,Number好,那么多少由你。那么现在呢,我们呢?
01:01
Lock lock等于newclock。那么是不是有点像我们的。你有一个re enter lock一回事,OK,好,那么它的构造方法呢?我们大家漏眼有且仅有一个OK,创建一个新的锁,处于未锁定的状态,没人用嘛,但是我先六出来那么好了,那么线程操作资源类我们不废话,我们这就不在外面再建个类了,直接在这个类里面封装好,其实就是两个方法。VO。Right,那么来这个相当于我们原来读写所的这个。方法这么说能跟上一回事,好,那么接下来请看啊。现在呢,3BLOCK我们要加个锁,那么加什么锁,我们是不是要加个斜索,大家请看,加斜索的时候,它会给你返回一个戳记,我们前面是不是说过有点类似于什么一个流水号啊,OK,那相当于说这个写锁。你看一个流水,戳记看。Be去按lock或者是转换这个模式,也就是说你加锁和解锁都同样需要同一个戳级,OK,好,相当于这笔订单的流水号来了。那么。
02:12
Stamp。加到这儿,那么现在呢。兄弟们来到这儿。这个时候我们就是什么写线程,那么这个时候呢,就是相当于说写线程准备修改,我是不是要去写了,好嘞,那。Try catch finally,那么对于锁的话,你要想写短一点,我们就把这个catch去掉好,那么这呢,有一个脱机了,那么加了个锁,这个number啊,那么很简单,那么这里number。嗯。37加个13刚好是50,我随便加的啊,只是说你随便加多少都可以,只是说代表这改了,那么现在。弟兄们,我用完了,那么老规矩,这是不是加了个写锁lock,那么跟前面一样,这是不是一个写锁lock,你final里是不是要按洛OK,所以说兄弟们在这儿请看我呢,要干的事是不是叫安?
03:06
Write lock,同一个戳记。明白吧,所以说呢都一样,那么。搁到这儿,完火以后我们呢?直接出来。和前面一样,那么这个是是什么?上面是斜线成准备修改对吧,我先获得了这个戳记了对吧,然后呢,进去37加13,那么写是不是写成50了,那么这个时候解锁。如果能看到这儿,那么就是斜线程怎么着。不是准备修改,这个时候是不是就是我们的结束修改,那么同学们很简单的一个小方法,没问题吧,这就是我们传统的鞋。枷锁。跟以前的一样,加解锁用完了,解锁无非就是多了一个戳字,好,那么弟兄们。接什么?我们说过了,看这个公式啊,我们先来给大家演示三和传统的。
04:01
读写所的功能是一样的部分,然后咱们再说新东西啊,那么这个时候我们来自己封装一个是写一个呢是读,那么效果呢,和之前的差不多来吧,那么在这一块呢,我们也是STEM lock点是吧。Redlock。那么。OK,还是这么一个戳击,那么。呃,在这块完了以后。我们要形成呢,那么就是。进来了,Come in。那么假设啊,我们现在呢,要给后面呢,给他完成什么读写锁,就是说如果他用这种,也就是我们传统的这个叫。悲观读。OK,意思就是这句话。如果没有完成的时候。写索无法获得,我们先把传统的给大家演示清楚,那么假设我come in,然后呢,进入到了read look,好吧,然后呢?
05:01
进入到了这个code block。这个代码块里面了。OK。没问题吧?我干嘛呢,四秒钟。然后我呢,再continue。好了,就这么简单,相当于说我这进来这个戳记,假设拿到的编号是这样,下面我们呢,暂停四秒钟啊。好,那么这四秒钟是什么意思呢?Sleep。那么现在说一秒两秒,三秒四秒,好,我们来故意来磨蹭,听懂了吧,那么这个时候我们来。得到这儿,那么就是。正在读曲轴。相当于说。我这四秒钟要打印出这句话模拟啊,我们这读到了这个东西的,读很长时间要四秒钟,只是为了后面演示效果啊,怎么来try finally。
06:04
代码呢,看着少一点,搁到这儿。T就等于我们的。Number。相当于说现在这个是static的对吧。所有线程都可以直接来访问,好,那么拿到了以后。来吧,我这儿。干的活呢,就是。获得。成员变量。值。那么这个时候我的结果值是多少?那么就是我们的下面这个result没问题吧,好了,那接下来呢,我们呢,会发现。来,要给大家证明。听好。读没有完成的时候,写索是无法获得的。所以说我们这儿。直接把这段给拿掉吧,因为上面已经有这个现成的编号了,那么就是。
07:05
斜线城。没有修改成功,因为有毒索的时候写无法介入,那么。读索十号。解锁无法介入,OK,好,那么也就是。传统的。什么鬼?读写互斥,弟兄们,没没问题吧,那么好了,那么接下来呢,就到这,那么就是stalo.unlock great,还是给我填同样的戳记。OK,相当于这个功能,完全就是我们这个功能的一个方法。邪所读所一样。写锁带戳记,关的时候带戳记,读锁带戳击,关的时候带戳击,就这么简单,OK好,那么。
08:00
兄弟们,那接下来你要怎么个演示和测试呢?来吧。搁到这儿,我们先把传统的这套搞定。那么DEMO。那么好在这块我们就是。没说是吧。OK,那么这儿就是我们相当于我们传统的资源类,那么来。这个呢,就是我们的读线程。OK,好了,那么你要怎么读呢?那么resource第二,Read。这一波没问题吧,那么现在我们都会明白,他读的过程当中,就是我们传统的读,那么这个值我们来看看啊。现在呢,我们呢,直接过来这儿。一秒钟以后。这个呢是我们的传统,读一秒钟以后,我们的。写现场也要介入了,我们想看看我能不能写作成功,OK?
09:00
来这个时呢,是我们的斜线程。哦了,那么他要做的事呢,那么这个时候啊,请看,那么比如说啊,我们可以再打的细化一点。那么这个相当于说就是我们的。血线产。Come in,但是我能不能干活,我进来了,我现在想写,但是我们读线程拿着锁的时候,我们现在是不是读没有完成的时候,写索无法获得,我们来吧,这个时候resource第二。Right OK,好,那么同学们看一下效果演示,现在我们还没有介绍新东西啊,我们只用一个最简单sta block,跟以前一样写和读来吧,我现在在这儿读着呢。一秒钟以后看看来。读线程写线程,什么情况?来,同学们搂一眼。我们来看啊,读线程启动了,进入到了读的代码块。四秒钟要有个要求,哦,这有点小手误啊,那么,但是弟兄们呢,应该明白这个意思。
10:06
Block code code block,好,那么现在。读线程,正在读曲轴,哪来的是不是这句话?间隔一秒钟以后,读线程正在读取中,好,现在写线程想进来修改,如果写线程进来修改成功的话,它会把37加个13变成50,同意吗?那这个时候请大家看读线程正在读取,读读读读读,这个时候同学们请看读线程是这段,这有四秒钟读读读读读,然后如果写线程修改成功了。这个值就应该是50,但是由于它目前是传统的是吗?读写锁的这个功能。你独所。没有示范的时候,写索无法获得,所以说读的时候还是获得成员变量37给你打出这句话,写线程没有修改成高读锁的时候,写索无法介入,传统的读写互斥,那么这时候大家请看现在。
11:07
写线程。准备修改写线程,结束修改,那么这个时候如果我们再多出来一句,那么才是我们最后的这个,呃,Number值就会被写线程修改为多少50 OK,就这么简单,好,那么在这块啊,如果有疑问的同学呢,我们这啊。可以到最后啊,比如说四秒钟以后,我们用我们的main线程来看看number的值是多少。Static的话呢,是大家都可以取来吧,我们再执行一次,那么现在我们没有讲新功能,只是告诉大家3LOCK完全可以当读写锁来使用,正在读的时候写索想进来,但是抱歉进不来,因为我们前面多次重复的说过,读没有完成的时候,写索没有办法获得,这个是传统版,所以说大家请看读线程的时候还是读到我们37,那么读索释放了以后,写索coming in了,对吧,那么在这。
12:06
他进来了,虎视眈眈的正准备着去获得这个写索,终于轮到你拿到了写锁修改,写锁修改完成,最后妹线成会发现你这个纸被改成了50 OK,那么所以说同学们,这个案例就是我们这儿的写和读传统版本,OK。
我来说两句