00:01
各位同学大家好,刚才呢给大家分析了我们要实现这个线程间通信的这个例子,并且说明了多线程编程步骤的上部和中部,那下面呢,我们就具体通过代码把这个例子来实现一下,首先咱先用这个的关键字先实验例子,然后我们再用look这个接口把这例子做个实现,那下面我们来写一下这个代码。首先第一个我在这个SYNC包里面,我们先创建一个类,这个类呢,我们比如说起个名字,我们就叫这个surprise的这个DEMO1,然后在这个类里边通过此nice的关键字把这个例子来完成,按照咱们的开发步骤,那我写一下,首先咱的第一步是不是要创建一个资源类里边定义属性和咱们的操作方法,那我下面我来起个类,这个类我起个名字,比如叫这个就叫Sha啊,因为是一个共享一个这么一个操作,然后在share里边,首先我们先定一个变量。
01:15
也就是一个初始值,那咱们起个名字,我来一个private in,咱们叫number number值等于零,这是我们写的第一步,然后写完之后在我们的资源类中,咱们来创建两个方法,第一个方法因为咱们让那个值是不是要加一,另一个线条下的值是不是要减一,所以第一个方法就是咱们加一的那个方法。然后第二个方法就是简易的方法,那我现在在里边写上两方法,首先第一个方法,我们来个public,加上site关键字,来一个叫加一嘛,咱就来一个叫in encourage,就inrement我们来加一。
02:01
这是写的第一个方法,然后第二个再写个简易的方法,简易方法起个名字叫这个第可瑞,就第一可问,所以现在把这个资源类中包括操作方法我们都定出来了,然后定义之后呢,按照咱的操作中的第二步骤,我们在这个资源类的操作方法中进行咱们的第二步操作。怎么操作,那就是判断。干活还有通知,那咱们下面来写一下,首先我们先做判断,那咱写一下啊,比如现在我加上一个if。大家注意,我这里面是不是要加一,那大家想一下,咱们在什么时候才加一。如果这个变量值等于零,就加一,如果你变量值是一,那咱是不是就不加一,所以咱们这里边做判断,比如现在我这个number值,如果说它不等于零,那我们目前是不是就不加一,那我写一下啊,就是做一个判断。
03:06
你的number这个值。是否是这个零,如果说这值它不是零,咱是不是就不加一,不加一的话,让它目前是不是一个等待状态,等它是零咱们才加一,所以下面我们做一个等待操作,那怎么等待,咱直接来一个,这次里边的一个方法叫做wait方法,目前就可以进行等待,这里边有异常,我把异常直接给他就是。出去,所以这是我们写的第一步叫判断,然后判断之后进入到咱的第二步操作,就是如果说number这个值。它是零,是零的话,那咱怎么样,是不是就给它做一个加一的操作呀,那我们来加一,我们来一个叫number。下架,这是我们的第二部分,就是咱说的干活,然后第三步是不是要通知啊,通知之前,比如我先做个输出,为了咱一会儿能看到一个效果,咱就直接把当前那个线程名称输出一下current threat。
04:13
Get name,然后后面加上咱们那个值,也也就是我们那个number的这个值。啊,咱为了区分加个冒号,后面是这个number。所以现在干活就完成了,完成之后最终咱们再来通知我们的其他的线程,比如我现在这个第一个线程加一之后,那后面这线程是不是要减一啊,所以咱们做个通知,我来一个这次点这个noify给咱就来一个noify o通知其他所有线程,所以目前这个加一的方法就完成了,按照我刚才说的步骤。判断干活,包括这个通知这个写出来了,然后写完之后咱们用同样的方式,各位应该能把这个简易的方法快速写出来,那下面我们就来写一下。
05:07
首先咱们还是做判断,我来一个if,然后if里边咱们判断就是如果说这个number的这个值。如果说这个值呢,它目前就是不等于一,咱是不是等待,因为你只有一的时候,它才要减一嘛,所以咱就等待调用这次中等V的方法,等待里面有异常给它也是加个Z,然后这个做到之后,如果它的值是一的话,那咱就干活,干活的话让那么值减一,然后干完活之后,最后再通知其他的线程,我们用这个叫noify o进行通知,所以咱们目前把这就完成了,包括我把这个当前的线程名称,包括你这个就是。Number值也给它做个输出,为了一会儿我们能看到它这个效果。
06:03
所以大家看目前呢,通过这个过程,咱就完成的这个资源类,包括它的创建,包括里边的属性和方法,也就是刚才我说的里边的这两步,第一步资源类创建,第二步在方法中判断干活,还有这通知,这个我们就完成了,所以通过代码各位把这步骤给他记住,是一个固定的一个流程。然后这个写完之后,第三步,咱就可以在这个里边来,最终创建多个线程,最终实现我们这个调用。第三步,创建多个线程。调用资源类里的那个操作方法,那咱们最后来写一下。首先第一个我把这个对象先给它扭一下,为了咱一会儿能进行调用,然后扭完之后下面呢,咱又创建两个线程。那我来创建,直接我就扭上一个threat,里边加上我们说那个拉的表达式的形式,然后在里边呢,比如现在我让这个就是1010,这个交替实现,让它就出现十次,我在里边加上一个不循环I等于这个一。
07:20
比如说I小于等于十,I加加,然后在里边做这么一个,就是调用share,里边这个就是第一个线程,让他先做一个这个加一操作,咱们叫这个in可瑞,然后里边有异常,我加上一个拆开补合一下,最终加上我们这个线程的名称,比如说第一个线程我就叫这个AA,然后最后再调里面这个叫此压的方法,这个不要忘记,要不然它会创建,所以这是第一个线程。然后咱们再复制一下,再创建第二个线程,第二个线程我叫这个BB。所以咱们通过这个代码我们就做出来了,只说你注意啊,DB线程中让它值是不是要减一啊,所以咱调这个叫第可的方法,这个是加一方法,这个是减一方法,我在里边特别加个注释,这是减一。
08:16
上面这里边是。加一,所以大家看啊,目前咱就通过这个S的关键字,把咱们这个例子就完成了,咱们两个线程对一个初始变量值是零的,这个变量一个线程加一,一个线程减一,目前我们就写完了。然后写完之后,最后咱们把例子我们来做个测试,看一下最终的效果是怎么样的,那咱们来执行一下啊,我们看结果。首先啊,大家看效果,我在里边,你看A线程是不是1BB是0101010,以此类推,一共交替执行了是不是十次,所以咱们要的效果就这么一个效果,所以现在啊,我们就完成了,所以各位通过这个例子,你第一个要熟练咱们这个多线程的编程过程,包括咱们里边这个目前的三步操作,第一步,第二步和第三步。
09:17
所以这个就是关于线程间的通信,用SNE的关键字,咱们的代码实现过程。
我来说两句