00:00
好,那同学们上一讲,我们给大家详细的讲解了S和洛克的区别。按照。一。23455个维度给大家进行了分享和讲解,那么这道题目不再重复啰嗦,但是呢,下面呢会看你要是用新的落克有什么好处啊,你要举例说一下,那么结合我们的第五点所绑定多个卡地上条件,这个就是什么?包括可中断和多条件坎迪省,这个就是洛克它独有。那么。Snchize是没的,但是洛克呢,就可以进行什么精确唤醒,它不会像size,要么随机唤醒一个,要么唤醒全部,那言下之意这个是吗?是不是就是我们的notify唤醒全部,是不notify物那么好。以前并发。没那么重要,但是现在我们来看看,随着互联网技术的崛起,我们来看看这种题目。
01:03
多线程之间要按顺序调用。ABC3个线程。要求如下,A打印五次以后知BB去打印十次,完了以后通知C打印15次,紧接着ABC。依此类推,重复来十轮,那言下之意就有点类似,于是什么概念呢?以前你呢很粗糙,反正吧,我就三个线程。A完了,Notify war或者notify,到底是假设,这是A,到底是B被唤醒,C被唤醒。以前用以前老板的think这个来控制就会有点困难,但是现在我要求你每次都要很精确啊,我们就是一个圈。言下之意。不跟你废话。A。完了以后,咱们要求BB完了以后要是C,甚至C完了以后还可以是D,那么我们永远要是这样的一种箭头方向,那言下之意是不是这个调用的维度和精度就大大加强了ABCDCD,那么好,我们呢,就要来看一下。
02:17
所绑定多个条件condition来认识一下什么我们的洛这个工具类它相关的方法。那么这道题目应该怎么处理和完成呢?首先杨哥在讲GOUC2019版的多线程口诀时候,详细的讲过很多口诀。一言不合,咱们是不是要来一个资源类,因为是不是线程操纵资源类啊,那么来吧,我们呢,Class。像。那这是我们的共享资源线程要操作的,那么这道题目我们要明白了,好说may是一切程序的入口,几个线程三个,那么言下之意又牵扯到我们线程之间的通信同步判断,而且这次啊,你就不能够再用notify,因为A后面是B,要求你精确唤醒,定点清除,点穴打击。
03:18
那么来吧,我们不妨呢,默认要干这么一个事,那么private be number等于什么多少呢?一那么这个意思呢?就是什么呢?A。就是一。B就是二,C就是三,因为我们多线程编程的时候是不是讲过还要注意一个问题,就是。该谁干?就是谁干,你干完了以后你得通知,那么我们默认说了谁先干,是不是A干嘛。打印五次,那说穿了。我们讲过多线程的第二组口诀,是不是需要是什么判断,然后呢。
04:02
干活,然后呢,通知或者是叫唤醒,那么这个呢,杨哥详详细的讲过,那么老规矩private干嘛?洛,然后呢,我们的洛等于。尿,Rent look,这个时候我们懂的都要加锁,那么言下支线,我们第一个方法public word print five,那么OK,那么同学们打印几次啊,五次我就直接写个print five了,那么好,首先打印打印打印,这个是不是不同的,次所是不是可以用一个方法,我为了讲课方便,我用三个方法,那么这个时候今天的家庭作业,你就把我刚才讲的三个方法合成一个。好,那么这个是什么意思呢?我为了好讲课哈,那么来,同学们,我们这是不还没有写condition呢?那么来吧,老规矩,那么这个时候try look。
05:03
Lock,那么第一步我们拿过来干什么?判断我们讲过了,多线程的判断,为了避免线程的虚假唤醒,是不是Y呀,干嘛?如果说number不等于一的话,那么兄弟我就要等大默认值是多少一,那么言下之意,一不等于一,整体是个副不进来,说明第一次应该是A线程,它要干什么?打印五次,那么这个时候干嘛?是不是就我们的干活,那么这个时候过来。那么我为了好方便讲课,我就把它改成了一和五,你实际上而言的话,你也可以写写零和。五哈都可以,那么呢,我这为了是这样,我一般不喜欢口语化的说零号线程,我就改成了一和五哈这块,你不改也行,那么来吧奥my current,那么这个时候同学们你懂的。那干嘛呢,我这number,那么言下之意。
06:03
调用这个方法打印五次啊,那是不是这句话就是12345,那么干嘛呢?那么这个时候我们呢,打印我们这个I哈,不是number,那么言下之意,Number是个判断标志啊,那么好。接下来。我们呢,要干什么,是不是通知啊,那你懂的。A线程进来调用PRINT5这个方法打印五次I12345,那么你干完完活以后,你要通知,你通知谁啊,你是不是要干嘛,有A线程通知谁呀,B线程,那么这个时候你怎么通知呢?如果换以前this.notify or或者notify,你没有办法100%的保证下一个就是B他过来接手啊,那么所以说这个时候,那么结合我们以前讲的,大家呢,都会明白,我们是不是就private。Condition,对于这样的CE等于什么?落克点new condition,然后直接NEW3个,因为它是ABC3个线程,那么干什么呢?来吧同学们,最精彩的部分注意,我们是要用这个,一方面再讲一个题目,另外一方面是不是把这个问题再带着大家复习,最终要回答人家你有什么好处?
07:20
好,那么这个时候同学们我们都明白,如果这个number不等于一,那么C一点什么。不等于C,说明不该是A干,那么这个时候A干什么?直接。进来等着,否则就是我干,那么接下来的通知干什么呢?注意这儿有个标志位。一开始。Number是一的一。不等于一这个是个force,说明什么?A线程一第一次A线程来访问不进来,A线程要干活,干嘛打印五次,然后呢,通知你怎么通知啊。
08:00
那么这个时候。干嘛?Number首先要把它改成二,说明是要二号兄弟谁呀,就是我们的B来接盘,那么这时首先先修改标志位,这个非常重要,多线程编程,然后你怎么通知啊,你不是通知所有人,你只通知一个谁C2.signal,那么大家请看这个时候是不是就非常非常的重要,那么言下之意。在这种情况下,我们就可以判断A干完了,打印五次,然后通知通知谁啊,我只通知我们的是吗?二号线程,这个非常重要,好,那么这是PRINT5,那么老师为了好讲课,我直接过来这写了个十,那干嘛呢?如果不等于二轮不到二干,那么就是二要等待,否则。二要干什么,打印十次,然后呢,二改为三三,我们呢,这块直接被我们的程序唤醒。
09:01
好,那么这块干嘛,我们呢。二完了以后通知三,那么三。被通知OK,这是三,干嘛打印十次,那么以此类推,我们呢,直接。找到我们的打印15次,这个时候干什么呢?言下之意,如果不等于三,三不能干三角wait,否则就轮到三干,三干什么?打印15次三完了以后干什么呢?同学们B完了以后是不是C?那么眼下这是不是倒回去要通知一啊?这么说能理解好,那么这块时候带着大家再来看一下,那干嘛呢,我们呢缩一下哈,我这儿呢就。5015ABC好,三个方法,注意一把锁里面有三把备用钥匙,你用哪一把锁好?那么这个时候干嘛?老规矩线程操纵资源内那么呢干嘛呢?
10:02
直接过了来同学们几个线程按照题目要求是不是三个,那么这个时候每个线程是不是来十轮,那么来同学们,这个就是我们的什么A线程,那么干嘛呢?每个线程来十次。过来,那么等于十,那么这个时候多少呢?就是一开始那么OK,那么下resource.print five,那么这个就是我们的什么A线程循环十次。每一次啊调用一个PRINT5这个方法,每调一次啊打印12345,完活以后,干完一次马上通知BB干完通知C业我们来看一言我们相应的程序是否OK,那么这个呢,是我们的BB的话呢,干嘛调用的是十方法,那么我们的C这个东东呢。我们呢,调用的是我们的什么15这个方法,五十十五来十轮,好,那么同学们这个就是我们对于这道题目和同学们加深多条件condition相关的设置和反应,好那么同学们我们来执行一下。
11:12
那么大家请看,如果一切顺利,来十轮,我们就看第一轮,A打印五次,12345 B打印十次,A完了以后马上是B123467890 C打印15次,一二三四七八九十十五,那么言下之意,这个是不是就是我们的第一轮,第一轮完活以后,来第二轮,A再打印五次,B再打印十次,C再打印15次,这就是我们的第二轮,那么这个时候同学们。Lawyer是不是彻彻底底的完成了锁绑定了多个条件condition定,这把锁绑定了123个condition定,可以精确唤醒啊,哎,这个就是用我们的re look相对而言的一些更细的进度的处处理和好处,这种问题如果你要是换以前的S,那么解决起来就会有些些麻烦和困难,那么。
12:08
除了讲这个题目,又给同学们再加深了一个题目,那么这个时候多线程的调度和通知唤醒机制,那么我认为我们已经复习了算是五六遍了,那么这块同学们请务必拿下好,那么这道题就给大家分享到这儿。
我来说两句