PriorityBlockingQueue简介
PriorityBlockingQueue 是带优先级的无界阻塞队列,在内部使用二叉树堆维护元素优先级,使用数组作为元素存储的数据结构,这个数组是可扩容的。出队时始终保证出队的元素是堆树的根节点,而不是在队列里面停留时间最长的元素。使用元素的 compareTo 方法提供默认的元素优先级比较规则,用户也可以自定义优先级的比较规则。
主要的方法介绍
§ offer(E e)
向队列中插入一个元素,由于是无界队列, 所以一直返回 true。
§ put(E e)
内部调用的是 offer 操作,由于是无界队列,所以不需要阻塞。
§ poll()
获取队列内部堆树的根节点元素,如果队列为空,则返回 null。
§ take()
获取队列内部堆树的根节点元素, 如果队列为空则阻塞。
size()
计算队列元素个数。
示例代码:
public class PriorityBlockingQueueTest {
static class Task implements Comparable
运行结果如下:
如上代码首先创建了一个 Task 类,该类继承了 Comparable 方法并重写了 compareTo 方法,自定义了元素优先级比较规则。然后在 main 函数里面创建了一个优先级队列,并使用随机数生成器生成10个随机优先级的任务,并将它们添加到优先级队列。最后 从优先级队列里面逐个获取任务并执行。从结果可知,任务执行的先后顺序和它们被放入队列的先后顺序没有关系,而是和它们的优先级有关系。
本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.sosokankan.com/article/1441365.html