00:00
在开始编码support案例演示之前,我们不妨再看一下上面的限制条件,就是object和condition,那么这个时候他们有两个限制,第一个必须在所块中,第二个必须要先注意,先等待后唤醒这样的一个顺序。那么言下之意。第三组的洛克斯port它出来了,那么你们两个都有这个限制。坦白讲,后面的技术一定会比前面更优秀。他能不能突破这两个限制啊,不但能搞定你们两个可以搞定的事儿,你们两个搞不定的洛克斯珀特也能给你摆平呢,咱们拭目以待,代码说话好,那么下面。来吧。各位亲,和之前一样,那么现在呢,我们呢,第一。换以前我们来看它的原语。创建什么锁啊,人家自己就拿这把锁lock,然后。阻塞原语,深刻体会以前我们这儿是不是叫什么SNCH的整个类。
01:04
整个对象丢进去,现在不用了,干嘛呢?来吧,和之前一样啊,干脆这呢,我就。偷个懒了。来。第一,他命进来了,进来了以后,以前我们是不是要额外他人家不用。Lock support。然后。OK,完了以后我们在这儿怎么着?被唤醒没了,那么和之前一样,一秒钟以后,T2这个线程上台了,那么来吧。我们T2这个线程呢。直接呢,也就是什么发出通知哦。OK。这块。洛克。Support on park来,由于这个参数啊,它需要传一个线程,也就是说我现在T2要给哪一个对象发这个通行证,所以上面的方法我们做一下适当的修改,那么t1.startok,现在。
02:10
T2,要给哪一个县城发安帕克通行证才能放行?听懂这个意思吧,所以说这个是拦截,这个是发放通行证,让这个方法失效。放弃,取消拦截,放行,OK,好,那么同学们咱们正常使用,突然发现我们的代码是不是很清楚啊,第一个不用什么锁块了,也没有什么snchize lock那些同步关键字,直接就干。所以说同学们我们先来看正确的使用O不OK。第一个。没有锁块,T1COMING t2发出通知,T1被唤醒完成,怎么样?是不是比之前的相当简洁?那么至少我们这儿可以得到第一个结论,这个洛克斯珀绝对不再是什么一个三角形,为什么park and park足矣,OK,好,那么同学们,这是我们的第一个痛点,已经解决第二个。
03:04
老规矩。那哥们儿。我们现在呢,一秒钟以后你再给我执行,那换句话说,我们是不是先让T2发这张许可证。你先吹哨,到时候你还能不能唤醒这个T1呢?我们大家来看一眼之前啊。T1先起到T2发通知啊,然后T1被唤醒了,那么现在我们的顺序变了。T2先提前唤醒,提前提前叫醒,那么这个时候一秒钟以后,你这个park。还会不会阻塞T1呢?那么下面我们来看一眼,此时顺序颠倒,先安帕再帕来,同学们,T2先发出通知,大家请看T1 come in成功进入,T1被唤醒,也即我们现在可以得到我们代码的结论。第一个正常天生就无锁块的要求OK,第二个之前错误的先唤醒后等待。
04:08
洛克斯照样支持,也就是说你为诺替范应该正确的,是不是应该是先等待后唤醒没问题吧,但是现在先唤醒后等待,先等待后唤醒,洛克斯波特照样支持啊,这么说能跟上,所以说在这块的时候,那么请同学们一定要注意。这是我们代码写过了,在这有个小小的解释啊,来,如果不放心的同学啊,不妨呢,我们按照我的笔记啊,那么假设我把这个时间呢,三秒吧,那么来。啊,我们做一个计时点。Current。这个时间来吧。什么意思呢,三秒钟以后啊,我们先发放这个许可证。再跑一次啊,也就是他这个根本不在乎你的顺序,谁先帕谁安帕,之前之后无所谓,大家请看。
05:01
他们两个。1642678545801958019说明什么?和我老头比上的一样。Sleep方法,不管是一秒还是三秒,它我们先把洛克这个通行证。给T一发了,我们先按帕先发通行证,三秒钟T1醒来了,执行park无效,什么意思啊,有点类似于我是什么持证上岗,实证走高速公路,已经提前缴费了,根本就没有阻塞效果。解释如下,先执行了安帕T接,导致上面的park方法已经形同虚设,时间是一样的,并没有浪费,听懂了吧?请看0243 0243等等,那么类似高速公路的ETC提前买好了通行证,安帕到闸机处,直接抬起栏杆就放行了,没有帕克阻塞拦截,听懂,所以说这块相当相当的优秀。那么我们的安帕克一。
06:00
不需要在锁块里面第二个。等待通知还是通知等待,这个唤醒和等待的先后顺序它无所谓,那么你只需要帕安帕成双成双成对的使用即可。这个就是我们通过代码案例给大家演示了洛port强大之处。
我来说两句