-
疯狂创客圈 经典图书 : 《Netty Zookeeper Redis 高并发实战》 面试必备 + 面试必备 + 面试必备 【博客园总入口 】
-
疯狂创客圈 经典图书 : 《SpringCloud、Nginx高并发核心编程》 大厂必备 + 大厂必备 + 大厂必备 【博客园总入口 】
-
入大厂+涨工资必备: 高并发【 亿级流量IM实战】 实战系列 【 SpringCloud Nginx秒杀】 实战系列 【博客园总入口 】
说明:阅读本文之前,请先掌握本文前置知识: 跳表 核心原理 图解,以及ConcurrentSkipListMap - 秒懂。
JUC 高并发工具类(3文章)与高并发容器类(N文章) :
说明:阅读本文之前,请先掌握本文前置知识: BlockingQueue -秒懂-图解。
1 LinkedBlockingQueue的基本概要
LinkedBlockingQueue是一个基于链表的阻塞队列,其内部维持一个基于链表的数据队列,实际上我们对LinkedBlockingQueue的API操作都是间接操作该内部数据队列,
7.5.1 LinkedBlockingQueue 构造函数
LinkedBlockingQueue是一个由链表实现的有界队列阻塞队列,但大小默认值为Integer.MAX_VALUE,所以我们在使用LinkedBlockingQueue时建议手动传值,为其提供我们所需的大小,避免队列过大造成机器负载或者内存爆满等情况。其构造函数如下
/**
* 默认情况下,创建一个容量为 Integer.MAX_VALUE 的 LinkedBlockingQueue
*/
public LinkedBlockingQueue() {
this(Integer.MAX_VALUE);
}
/**
* 创建一个具有给定(固定)容量的 LinkedBlockingQueue
*/
public LinkedBlockingQueue(int capacity) {
if (capacity <= 0)
throw new IllegalArgumentException();
this.capacity = capacity;
last = head = new Node<E>(null);
}
/**
* 创建一个容量为 Integer.MAX_VALUE 的 LinkedBlockingQueue,
* 最初包含给定 collection 的元素,元素按该 collection 迭代器的遍历顺序添加。
*/
public LinkedBlockingQueue(Collection<? extends E> c) {
this(Integer.MAX_VALUE);
for (E e : c)
add(e);
}
三个构造函数的说明如下:
-
默认构造方法创建一个容量为 Integer.MAX_VALUE的 LinkedBlockingQueue实例。
-
第二种构造方法,指定了队列容量,首先判断指定容量是否大于零,否则抛出异常。然后为 capacity 赋值,最后创建空节点,并指向 head与 last,两者的 item与 next此时均为 null。
-
第3种,利用循环向队列中添加指定集合中的元素。
LinkedB

本文深入剖析了LinkedBlockingQueue的工作原理,包括其构造函数、内部成员、添加与删除操作的实现细节,以及与ArrayBlockingQueue的区别。
最低0.47元/天 解锁文章
887

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



