00:00
各位同学大家好,刚才呢,我们完成了线程间的通信的代码,那下面呢,我们继续往下来学习,下面咱们看一下我们内容中的第四个内容,线程间的定制化通信,那什么叫定制化通信呢?给大家解释一下。大家注意啊。我刚才那个线程的执行,最终输出它的顺序是不是不确定的,就可能是AB,也可能是BBAACC是不一定的,而我现在我可以让这现成的按照咱们约定的顺序进行调用,按照咱们约定的顺序进行输出,这就叫线程间的定制化通信,那这个过程呢,我们通过一个具体例子给各位来演示这个流程,那下面我们来看个例子啊。那这例子我来说一下,我想这个位置。线程间的定制化通信,那这例子,比如现在我想这么来做。
01:05
给大家写一下啊,比如现在我们这里边就是启动三个线程,然后咱们让三个线程按照就是如下的要求进行操作。什么要求我来说一下啊,比如咱们要实现我第一次就是打印AA线程,或者说执行A线程,让A线程先执行,然后这个线程让他来,就是打印这个五次。这是第一个,比如A打印五次,然后里边就是第二个,我们让这里边AA执行之后,我们再执行,这个叫BB线程,让BB线程第二个直行并且打印。十次,然后执行之后再执行CC线程,让它就是打印这个。15次,这是我们的第一个执行,然后执行之后我们继续执行,就是接着咱们再执行,还是同样的顺序,AA打印五次,BB打印十次,CC打印15次,以此类推,咱们一共,比如我要进行这个十轮的这个操作,第一轮是ABCC,第二轮ABCC一共进行十轮,这就叫线程间等定制化通信,在这过程中,咱的特点就是A是第一个直行,BB第二个直行,CCD3个直行,这是我们要做到的这么一个效果。
02:35
那这个效果有什么特点呢?第一个咱的线程是不是按照咱们的顺序进行调用了,并且每个里边做不同的次数输出,输出简单就是循环,比如我循环五次,循环十次,循环15次可以了,关键是怎么让这线程按照顺序进行调用,这是我们要解决的这么一个问题,那我下面给各位把这个例子咱们先做个分析。
03:01
分析之后,咱们再通过代码把这例子我们做一个实现,那咱们看这个例子该怎么去做,当然这个实现呢,肯定会有多种实验方案,我这里边给各位说一种比较通用的实验方案,那咱们看怎么来做。比如我现在啊,这里边我们是有三个线程,那我来画一下,比如现在这代表的的三个线程。然后三个线种分别是这个就是AA。BB,还有这个叫CC,然后三个线程怎么做呢?因为咱为了让我们按照顺序输出,所以我现在给每个线程添加一个标志位,就是它一个标识,比如说我们约定啊第一个线程,但标志位的名字我就叫flag。第一个线程标志位就是等于一,然后第二个线程标志位我们等于二,第三个标志位咱们等于三,现在第一步我们给它加上一个标志位,然后加上标志位之后下面呢,咱们在操作中肯定按照咱的过程创建属性,就是标志位等于零,然后定义我们的。
04:14
操作方法,在操作方法中咱怎么做呢?给大家写一下。首先咱们看啊,如果说我现在在这个A线程中,首先咱的第一部分。是不是先给我判断呀,判断一下,如果说我这个标志位它的值等于一,那咱就打印这个五次做这个事情,然后打印五次之后,大家想一下啊,咱们下面要干什么。下面我是不是要让BB执行了,那咱做好就是修改这个标志位。让这个flag的值是不是等于二啊,然后再通知咱们这个BB的这个线程,就给他做个通知,告诉他你目前需要进行调用了,所以这个是我们要做的这么一个事情。
05:07
也就是在这里边我再说一遍啊,A线统中咱们先判断标志位是否是一,如果是一的话,那咱就打印五次,打印之后修改标志位等于二,然后再通知这个BB线程,这是咱们的里边的第一部分,只是这过程中呢,就要用到咱们lock中这个condition,比如咱们起名叫CE。然后用它来完成这个通知,包括里面这个等待的过程啊,这个我们起名就叫这个C。这是咱们的第一部分,然后这个做到之后,我们继续往下来看,比如现在我们通知了BB的这个线程,那在BB线程中大家想一下咱要做什么事情。跟上面是不是类似的,所以咱们同样还是先进行判断,判断这个flag的值,如果说它等于二,那得怎么样,是不是就要打印这个十次。
06:06
然后打印十次之后干什么,是不是还要继续去修改这个标志位,就让这个flag的值等于是不是三角,因为咱们要让CC线程执行,然后最终再通知这个CC线程,然后BB这个线程,咱们起个名字,我们叫C2。这个是咱们的第二部分,然后这个做到之后,当咱们通知了CC线程之后,那CC线程它要继续完成里边这个操作,那他做什么给个位,我在里边咱们还是写一下。首先,第一部分跟上文一样。咱们也是做个判断。如果说flag值等于三,那咱们就打印这个。15次。然后打印之后干什么,是不是要修改这个标志位。
07:01
大家注意啊,这个标志位要怎么改呀?你想一下,当我CC打印之后要干什么,是不是还要继续打印A呀,所以我这个标志为flag的值是不是要改成一,然后咱们再通知这个AA的这个线条,比如这个名字我就叫这个C3。所以现在咱们就是按照这个流程完成这个线程间的定制化通信的这个操作课程呢,给各位同学我再来说一遍啊,咱的做法就是给每个线程定义一个标志位,然后通过标志位完成它的定制化通信,A线程是一,BB是二,CC是三,在每个里边都是先判断当前标志位的值,如果是当前这标志位,那我们就做打印操作,打印之后修改标志位,变成下一个线程标志位,最终在通知价值线程,比如说A线程改标志位是二,通知BBBB改成三,通知CCCC改成一,再通知AA,以此类推,咱们一共进行十轮操作。
08:12
这样的话,我就把这个线程间的定制化通讯这个例子,它的一个实现过程给各位做了一个分析,各位要掌握我们目前的实验流程,那这个分析之后呢,咱们马上就通过代码方式把这个效果最终做实现,各位先知道这么一个分析的流程。
我来说两句