BlockingQueue - 阻塞式队列
一、概述
- 依然遵循先进先出的原则
- 阻塞式队列往往是有界的:意味着如果队列已满,则新的添加请求会被阻塞;如果队列为空,则新的获取请求也会被阻塞
- BlockingQueue是阻塞式队列的顶级接口
- 最常使用在生产消费/消息队列
二、ArrayBlockingQueue - 阻塞式顺序队列
- 底层会基于数组来存储数据
- 在使用的时候需要指定容量,且容量指定之后不可改变
三、LinkedBlockingQueue - 阻塞式链式队列
- 底层是基于节点来存储数据
- 可以指定容量,容量指定号之后不可变的。也可以不指定容量,则默认是Integer.MAX_VALUE -> 2的31次方-1。因为实际开发中,几乎不可能向队列中添加21亿个元素,所以可以人为的认为这个队列如果不指定容量是无界的
四、PriorityBlockingQueue - 具有优先级的阻塞式队列
- 可以指定容量也可以不指定容量,如果不指定默认是11
- 在获取元素的时候是有序的 - 要求存入的元素必须能够排序,这就意味着元素对应的类必须实现接口Comparable,重写compareTo方法指定比较规则
- 如果是迭代遍历,不保证排序
五、 - 同步队列
- 不需要指定容量,它的容量默认为1,并且只能为1
扩展:BlockingDeque - 阻塞式双端队列,类似于BlockingQueue,在使用的时候也需要指定容量,但是可以两端放两端拿
本文介绍了阻塞式队列,它遵循先进先出原则,有界时队列满添加、队列为空获取会被阻塞,BlockingQueue是其顶级接口,常用于生产消费/消息队列。还介绍了ArrayBlockingQueue、LinkedBlockingQueue、PriorityBlockingQueue等类型的特点,以及同步队列和阻塞式双端队列的情况。
628

被折叠的 条评论
为什么被折叠?



