00:00
各位同学,刚才呢,咱们完成了guc中的第一个辅助类叫做减少计数的这么一个讲解,咱们通过一个例子把这个最终完成了演示,下面呢,我们来看一下辅助类中的第二个辅助类叫做循环栅栏,就是里边的这个单词叫做c value,那下面呢,咱们还是通过A篇文档来找一下这个类,看这个类有什么样的特点。那我们来看到啊,就是里边的这个类s value,然后这个类这里写到它是一个同步的辅助类,它允许一组线程互相等待,直到达到某个公共屏障点。在设计一组固定大小的线程的程序中,这些线程必须不时的互相等待。然后这是它的一个比较官方的描述,那这句话呢,到底是什么例子,下面给大家说的更通俗点,这里边呢,我来举个例子来说明这个东西。
01:04
那这里边啊,给大家说一下,首先呢,我举个什么例子呢?这个例子呢,我觉得各位同学应该都知道啊,在我们美好的童年的时光,咱们应该看过这么一个电视剧,叫做七龙珠。各位应该看过,我记得我小时候嘛,经常看这部电视剧,当时在青珠中呢,有一个典型的场景,这个场景说咱们集体七颗龙珠是不是可以召唤神龙,然后那神龙一出现,那咱可以许愿,他会帮咱们满足我们的愿望,就是七龙珠嘛,集齐七颗龙珠可以召唤神龙,而这个例子就是典型的循环栅栏的例子,那咱看什么意思啊,首先第一个咱是不是要各个地方去找龙珠啊,然后龙珠包含一星、二星、三星,一直到七星,等七颗龙珠都找到之后,我一召唤神龙圣能出现,等七个龙珠没有找到,或者没有找全的时候,龙是不是要等待呀,等你找到之后,这龙是才出来,它出来之后问你,你有什么愿望,那就是咱们许愿,他会帮我们实现咱的愿望,这就是典型的循环栅栏粒子,当七颗龙珠都集齐之后,最终才实现。
02:21
神龙的出现,然后咱们才能许愿。这就是我们说的叫循环栅栏,集齐七颗龙珠可以召唤神龙,那下面呢,咱就通过这个具体的例子,把这个代码给各位实现一下,首先咱们看一下这个A片文档中找到这个。Little。然后咱们看啊,在这里边,首先第一个它里边有一个构造方法,在构造方法中里边有这个值,比如说咱们看这个构造,首先第一个值就是咱说那个七颗龙珠嘛,这个值达到七,然后它里边有个renoval接口,它会执行这个方法,另外里边有一个叫away的,就是等待,等七颗龙珠都召集之后,那这个方法才执行,等颗龙珠没有都集齐之后,那它是不是一直进行一个等待状态。
03:13
所以咱们现在用这些方法,最终能实现咱的过程。那我下面用代码把这个给各位来写一下。咱们自我实现。首先第一个在doc里边呢,咱们先创建这么一个类。就是这个带的概率,然后把类创建,创建之后在里边咱们来完成这个对应的这个代码,C代码我们来写一下,首先我先加个注释,然后下面呢,我加上这么一个问方法。咱们来做个实现,那怎么实现,首先我们做里边的第一部分,因为咱们要最终是不是要召集七颗龙珠,就是收集好七颗龙珠才能召唤神龙,所以咱们先创建这么一个固定的这个值,为了一会儿使用,那我来写一个啊,我就来一个固定一值了,咱们来一个S和这个final,然后来一个int,这个名字我叫这个number。
04:14
这值等于七,就代表咱那个七颗龙珠那个固定值。然后这个写完之后,在咱们的闷范中,我们来做操作,首先第一步。创建咱里边那个叫c value这个对象,把这个对象我们来做个创建,那这里边我来创建一下。C力barri等于就是new上一个C力barrier这个对象,然后在new的时候呢,里边传入两个参数,第一个就是咱们那个七颗龙珠那个数量,然后第二部分刚才咱们看到里边是是一个run内接口,所以咱就直接用这个拉姆的表达式的方式,把这个咱们就快速写下。
05:02
然后在里边,比如说我们就做一个输出了,在一块儿看个效果就可以了,然后输出时,比如我写一下就是。集齐七颗龙珠就可以召唤神龙在里边,我就把这段话,咱们最终给他做一个输出,所以现在咱们把这个部分我们做了一个最基本的一个实现。这是难的第一步,谬上这么一个循环栅栏,这么一个对象里面设置你的固定值,包括你的固定值达到之后要做什么事情,我这里边就做一个最终的这个输出,这是我们做的第一部分。然后这个做完之后,下面呢,咱就做一下,就是咱们集齐七颗龙珠的一个过程。写一下啊。及其七颗。龙珠的这个过程,那怎么做呢?现在我在里边我就创建七个线程,那咱就循环七次,I等于一,I小于等于7I加加,然后在里边直接谬上一个TH,咱们来创建它这个线程。
06:13
那这里边我来写一下,比如现在在里边我也是做一个输出。啊,咱们输出一下啊,就把当前的线程名称我们直接输出来,然后里边给它最终加上,比如说我们这个表示啊,说你是几星龙珠。比如这是一星龙珠、二星龙珠或者三星龙珠。就是它被。这个。收集到了。这是我们写到的啊,而这个过程中,因为咱们最终是不是要集齐七颗龙珠啊,如果说你没有集齐七颗龙珠的话,咱是不是要一直处于一个等待状态啊,就咱调这个c barrier里边这个叫away的方法,处于一个等待的状态,这个过程中会有异常的出现,然后给它加上一个try cash给他就捕获一下,我把这个代码啊,直接写上这个。
07:09
TRY里边的。做一个补货,这个代码快速改造一下啊。然后比如说我就直接啊补过它那个。Except。这个异常。所以现在这个结构我们就完成了,完成之后咱们继续往下写,下面在这里边加上我们那个线成的名称,我们写上一个string,点外up,加上一个I,然后再调用咱们的大的方法,所以现在这个代面我们就最终完成了,这是我们写到这个。循环栅栏代码。然后这个代码我们再说一遍啊,最终咱做个测试,它的做法就是首先咱们建构固定值,因为咱是七颗种猪某,所以这值就是七,然后第二部分咱们妞这个循环栅栏对象里边设置它的固定值,包括你达到值后它要做什么事情,我这里边就做一个输出。
08:10
然后这个做到之后,下面就是咱们收集七颗龙珠过程,我是创建了七个线条里边new这个threat,然后每个里边会得到你不同这个龙珠。得到之后,当咱们没有达到七的时候,我会一直等待,等它达到七颗龙珠之后,最终这句话才会进行输出,这个过程就叫做循环栅栏,所以现在这个代码我们就完成了,完成之后呢,下面咱们把代码执行一下,看一下它最终的效果是怎么样的。比如现在啊,我来知晓一下,然后各位跟我一起来看一下这个效果啊,大家看。前面部分是不是七颗龙珠都被收集到了,然后最终就可以召唤神龙道。
09:03
这样的话啊,咱们这个效果就完成了,完成之后呢,给各位进一步演示啊,大家看我这里边是不是循环了七次,咱们这个值是不是七啊,当达到七才能召唤,比如说现在啊,我这么来改,我把这值呢,我改成六。那咱们看会有什么结果啊,比如现在我来执行一下。大家看一下,你注意啊,目前我的程序没有停止,还是在运行中,但是目前咱是不是机器到了六颗龙珠,集齐到了六颗龙珠,它目前怎么样,是不是一直处一个等待状态,就是目前它没有结束,因为你没有到七颗龙珠,它就一直等待,最终不能召唤神龙,所以咱们这里边把这过程就说完了,这就叫循环栅栏。集齐七颗龙珠可以召唤神罗,咱们通过这个例子,把这个guc中这个第二个强大的辅助类给各位做了一个演示,然后这个辅助类中呢,给大家说的更具体点啊,就大家看啊,这个叫S,就是它有这个可循环意示这个bar是不是有那个屏障,意思也就是表示当你达到这个屏障点的时候,它才会往下执行,如果说你没有达到这个屏障点,它会一直处于一个等待的状态。
10:25
所以这个类咱们就说完了,主要就是这么一个过程。
我来说两句