00:01
各位同学大家好,刚才呢给大家介绍了阻塞队列的概述,包括里边的基本架构,那下面呢给大家来介绍一下阻塞队列的分类,以及阻塞队列中有哪些核心的方法,那咱们来看一下啊,首先先看一下阻塞队列的分类,也就是咱们刚才在API文档中找到这个接口叫BQ,然后在它下边是不是有很多的实现类,这些实现类就是关于它各种的分类,那这个分类有哪些,给各位来做一个基本介绍,各位对它有一个认识,那咱们下面我们就一个一个来看一下它有哪些分类。然后各位看一下我们的文档中,首先我们看里边的第一个分类,叫ABQ,这是一个比较常用的组合队列。然后这个组的队列什么特点呢?第一个大家看这单词ara什么意思啊,是不是数组意思啊,所以这个队列是基于数组形式的一种阻塞队列,实现它维护的一个什么定常的一个数组,就是它的长度是固定的,以便就是缓存队列中的数据对象,这是一个常用的阻织队列,说的简单点就是由数组结构组成的一个有界的阻塞队列,所以这是我们的第一个分类,是比较常用的一个分类,然后再看第二个叫link的blocking q。
01:32
Link什么意思?是不是链表,所以这种形式说的简单点。就是由链表组成的一个有界的阻塞对列,它的大小问认值是引T格里边这个最大值,这是第二个,然后第三个叫比例,可这是什么呢?使用优先级对列实现了一个延迟的无界的作队列,第一个啊,它有优先级,就是这里边我们只有当指定的延迟时间到了,才从队列中回到元素,然后它是一个大小没有限制的队列,这是第三个,然后第四个,这是什么意思呢?它表示就是里边支持优先级排序的一个队列,然后下一个,这单词是不是有同步意思,这种形式是什么意思呢?它表示不存储元素组的队列,也就是一个单个元素的队列,就是它里边只有单个的,它里边啊就是没有多个元素,只存单个元素,另外还一个叫link的transfer,这表示由链表组成什么?
02:37
无界的左队列,还有最后一个,另一个叫blocking,这就表示由链表组成的叫双向的组合队列,所以这是里边关于阻塞队列一些基本分类,各位重点记住前两个,第一个由数组组成的有界的组合队列,第二个由链表组成的有界的做队列。所以这是关于左侧队列的基本分类,各位把这个知道就可以了。
03:05
然后这个说完之后,下面呢,给各位再来说一下左侧队列中一些核心的方法,然后这个方法我在这里边给大家列了一个表格,表格中就列出来了,这里边有哪些方法。那这方法我们来看一下,一会儿咱用代码给各位演示一下,这方法怎么做呢?或者说怎么看,咱们竖着来看啊,就这么来看,大家看,首先啊,第一类方法就是叫抛出异常,什么意思呢?大家看啊,第一个方法叫A的表示往里面加元素,第二个蕊木从里边移除元素,就从里边取出元素,第三个检查里边元素是否存在,那什么叫抛出异常呢?比如说我现在啊,往队列中加入元素,当队列已经满了,那咱们再加的话,用这个A的方法就会抛出异常,而第二个咱从队列中往出取元素,当队列为空的时候,它也会抛出异常,这是我们说的第一组方法,A的remove,还有element。
04:14
它会抛异常,然后第二类叫特殊值,咱们也是通过offer po和这个pick往里边加,从里边移除,包括检查,那这个什么特点,比如说我们现在往里面加元素,当这里边能加入的话,它就反应处,当你加入失败,就队列已经满了,但加不进去了,就返回false,而我从里边取元素,能取出来的直接返回元素,当队列中为空,取不到的话,它就返一个直教,那这是我们的第二种方法,另外还有第三组叫阻塞。阻塞什么意思呢?咱们用put方法往里边放元素,当你队列满的话,我是不是就放不进去了,那这个时候put的方法执行,它就会一直出一个阻塞状态,当你队列里边有元素,或者说里边为空的话,这时候才往里面进发,它会一直进行阻塞,然后这个take方法一样,当我从里边取元素,元素取完了为空的话,那我再调take方法,它就会一直阻塞,只要队列中有元素,它就会触发从里边能取出来。
05:25
这个里边没有这个检查方法,另外还一个叫超时,超时什么意思?也是opera po,只是后面加上一个时间,这个时间含义是什么?比如现在我往队列中放元素,但是队列已经满了,这时候我会等待,但是等待的话它不会一直等下去,有一个时间,当超过时间的话,它就会自动退出了,而我取元素一样,这时候我取元素,队列中为空的,那我元素取不出来了,这个时候我会阻塞,阻塞的话,当它超过了超时时间,队列中还为空,它就会直接退出了。所以这是我们说的阻侧。这中这几组相关的方法,分别是添加、移除,还有检查,然后他们会针对我们这个相关操作抛出异常返回处boss或者空,包括阻塞,包括阻塞过程中可以有它的超时时间。
06:23
所以这是关于咱们说的阻塞队列的分类,包括它核心方法的介绍,各位把这个给他要知道。
我来说两句