00:01
各位同学大家好,刚才呢给大家介绍了阻塞队列的分类,包括里边核心的方法,那当下面我们就通过代码把里面几组核心方法给各位同学,咱们来演示一下,咱们通过演示各位进一步感受阻塞队列中相关的特点,那下面我们在代码中写一下。首先我在里边,我先创建一个包,这个包我起个名字就要这个QUE。然后在里边呢,咱们来创建一个类,用于咱们的演示,这个类我起个名字就叫做blocking DEMO。EDEMO。咱们把类创建,然后创建之后我在里边我们写上这么一个问方法,在问方法中咱们来演示里边的几组操作,那咱们来做一下啊,首先我们的第一步咱们先创建一个阻塞队列,那我们来创建加上一个叫。
01:09
Blocking。然后咱们为了方便这个泛型,我就写上string了,起个名字又叫做blocking q等于new上一个类型,因为咱们刚才说的blocking q呢是一个接口,里边是不是有很多的实验类,那实验类中有很多,比如说咱就找一个比较常见的,我们用第一个a broken cos,一个数组的定长的一个组合队列。那我们写一下这个额,对。Blocking q在里边加上一个长度,比如说长度我们就写上一个三,所以现在把这个定长的阻塞对列我们就创建出来了,然后创建之后,下面咱们来做这个操作,首先我们先演示里边的第一组这个方法,然后第一组方法中我们往里边加数据,咱们看一下我的课件中,它加数据用的是这个叫A的方法,可以往里边加内容,那咱们来做个测试。
02:15
比如说我这里边啊,咱为了方便这个输出blocking q点上这个A。里边我写上,比如就来一个A,现在就像这队列中咱们就可以加入这么一个元素,那这加完之后,比如现在我把代码执行一下,咱们看一下它里边会返回什么样的这么一个结果。那我们看反义值是什么,是不是一个处,就是证明我们现在往里边加入一个元素处啊,也就是里边的这么一个结构啊,其实第二个也是反应处,就是它后面会有点区别,然后这个写完之后咱们继续来看啊,比如现在往里边我继续讲,我还是做过输出了啊,咱们来一个blocking q点上A的第二个值,我叫做B。
03:02
然后我再加上第三个值,第三个值咱们叫C,现在往里边加了三个元素,然后加完之后,我们用里面这个I的方法来给它做一个检查,那现在执行一下,咱们看一下它的效果怎么样。然后大家看这里边我们三个都是处啊检查就是里边有这个元素。所以现在啊,这个过程我们就完成了,这是我们说的里边的第一组,然后这个说完之后呢,下面咱们进一步演示,那我怎么演示呢?给各位说一下啊,因为我现在向里边咱是不是加了三个元素,然后我的长度是不是也是三呀,比如现在啊,我往里边加入第四个元素,咱们来个W。然后咱们看目前会有什么样的效果。大家看。什么结果?
04:00
是不是抛出了异常啊,他说什么?说这个队列否是不是已经满了,就往里边已经加不进去了,所以现在这个过程我们就演出来了,当你用A的方法,队列已经满了,然后往里边再加元素,它就会抛出这个异常,这个咱们就演出来了,然后演示之后,下面呢,咱们从队列中把这元素给它取出来,用blocking q里面这个方法应该叫remove方法,从里边取出元素,注意队列的特点是什么。是不是先进先出,那咱们来取一下啊,为了防止干扰这句话,先注掉,然后咱们从里边把元素取一下。比如现在啊,我就取四次,但是我这里边是不是只有三个元素,那咱们看它最终会返回什么结果。大家看啊,反应结果就是ABC是不是这三个,因为咱们是先进先出嘛,然后最后一个值是抛异常啊,它告诉咱们怎么样说没有这个元素,因为你里边只有三个元素,没有第四个元素,所以咱们现在把第一组方法就也是完成了,往里边放元素,用那斗从里边取用蕊木,如果说你队列满了你再放,或者你队列为空你再取,它都会抛出这个一常。
05:23
这是咱们第一组方法的解释,各位把这特点给它记住就可以了。然后这个演示后,下面呢,咱再演示里边的第二组方法。第二组,第二组咱们看一下啊,里边这几个方法,Offer po,还有这个叫pick,咱们重点也是offer和破这个方法,那咱们看一下啊,这个方法什么特点,首先我还是同样往里边放这个元素。我们用一个叫offer里边加这个值,所以这个值我还是abcd这几个值。我就直接复制一下啊,比如现在呢,我先加三个元素ABC。
06:06
然后加上之后呢,我再加第四个元素,咱们来一个WW,现在我执行,大家看会有什么样的结果啊。那我们看一下。大家看结果很明显,前三个反映什么,是不是错,最后一个什么false,证明你加失败了,然后这个我往里边加之后,下面从里边取下元素,用blocking Q点这个破方法。咱们来取一下啊,这里边我也是取四次。然后咱们执行看效果是怎么样的。大家看啊。前三次是不是取出来了,第四次什么是不是,那因为你队列中为空嘛,所以现在啊,这个方法我们就也是完成了里边的第二组offer和这个破方法,所以各位把这个给大家知道,那第二组呢,演示之后,下面呢,给各位同学咱们来演示第三组操作,我在里边咱们来快速写一下。
07:10
里边的B。组操作,然后第三种操作,我们也是往里边放元素,从里边取元素,它放用put取用take,当然这个过程它的特点是什么?会一直阻塞,那咱们看会有什么特点啊,比如现在我就直接放了,用这个叫put方法,然后往里边放元素,比如咱们放个A啊,放个B,包括再放个C,这里边有异常,我加上一个Rose啊,给走出去所这是第一个。然后咱们放第二个,再放第三个,现在给他放一下就是ABC。然后这个我们做完之后,比如下面呢,我再给它放第四个,咱们来一个这个W,大家注意啊,我阻塞队列目前长度是几,是不是三有,而我放的话,是不是应该只能放三个元素,但是目前我放四个元素,咱们看它会怎么样,现在我来执行一下,大家看它的效果。
08:14
各位注意啊,现在我执行了,你发现我的程序没有停止吧,是不是还在执行中啊,为什么执行中呢?因为你的第四个元素队列中放不进去了,它就会一直给你阻塞中,直到里边有空间的时候它才会往里放,所以接在就会一直出一个阻塞中,这就是咱说的put方法的特点,这各位给他知道,我现在给他手动停止掉啊。然后这个停止之后,下面呢,咱们从里边来取这个元素,比如我就放三个,咱取一下blocking kills,点上这个K的方法,然后这个取的话,现在我给它取四次,咱们试一下效果啊,因为现在这里边应该只有三个元素,但是目前我取四次,大家看它会怎么样。
09:05
你注意。前三个是不是取出来了,但是我现在程序没有结束,因为第四个它取的时候队列已为空了,它就会一直处于一个阻塞状态,当队列中有元素这一行才会被触发,才能把元素取出来,所以目前是这个特点,这各位得知道,咱们的第三组put方法,还有这个take方法,一个往里放,一个往里边,从里边取,它的过程中会出一个阻塞的状态,在这组操作咱们就也是完成了。然后这个演示之后,里边还有最后一组,也就是第四组操作,第一个操作咱们看一下啊。和刚才第三组类似,它也是会阻塞,只是这里边的有个什么超时时间,当你超过了超时时间之后,它就会自动给你退出了,那咱们来看一下里边的特点最终是怎么样的啊,咱们来试一下啊。
10:09
比如说我就写一个最基本的例子了,就是现在往里边来先放元素用,这个叫offer。啊,我就直接放几个元素了啊,咱就来一个ABC就放三个元素。啊,给它放一下啊,这是A,这是B。然后这个是C,咱目前是放了三个元素,然后我现在放完三个元素之后,比如现在啊,我再放第四个元素,第四个元素呢,我叫W,但是第四个元素是不是肯定放不进去呢?这时候会阻塞,但是阻塞的时候等到设它这个阻塞时间,那我现在设置一下,注意它这个阻的时间,设置这个格式。它里边的第一个部分加上你时间的值,比如说我们是这个三,后面加上时间的单位,咱们来一个time union,点上这个叫seconds,而我这么做什么意思?填三个元素肯定能放进去,第四个会阻塞嘛,但是它阻塞当超过三秒还放不进去,它里面就会自动结束,这就是咱们说的。
11:23
这个设置阻塞的时间,那我现在执行一下,咱们看一下效果啊。大家看。现在应该在阻塞中,然后你看等一会儿是不是结束了,这个它就放不进去了,包括咱们在演示里边,从里边取元素跟它是一样的啊,这个我就不再写了,因为是一模一样的,然后你通过这个offer方法和碰方法能设置你的超时时间,当超过时间这数据还放不进去,超过时间数据还取不到,这时候就会自动退出,或者说自动结束。所以这些呢,就是关于我们说的阻塞队列中常见的自组方法,大家把方法是什么,包括特点给它记住。
12:08
所以现在我们就完成了,最终给大家总结一下啊,阻塞队列嘛,是咱们这里边一个很常见一种结构,所谓阻塞,它就是在这个过程中,咱们一边往里放,一边从里边取,当你放满的话,它会阻塞,当你取空的话会阻塞,而里边有元素,我会自动触发来取,当里边有空间,我会自动触发往里面放,这个叫阻塞队列,然后阻塞队列中它有各种的分类,包括咱说到的数组定长,链表定长等等分类,以及里边相关的核心方法。所以关于这一部分知识点给各位就介绍完成了。左侧队列。而阻塞队列呢,在实际的用中,咱们后面马上讲的这个概念叫线程池,里边就会用到咱们说这个阻塞,对这些特点啊,所以现在这部分知识点给各位就最终说完了。
我来说两句