当前位置:网站首页>Linkedblockingqueue source code analysis - initialization
Linkedblockingqueue source code analysis - initialization
2022-07-07 05:13:00 【InfoQ】
LinkedBlockingQueue characteristic
- Blocking queue based on linked list , The underlying data structure is a linked list
- First in first out queue based on linked list , New elements at the end of the team , Get the elements from the team head
- The size of the linked list can be set during initialization , The default is Integer The maximum of
- have access to Iterator To iterate
attribute
public class LinkedBlockingQueue<E> extends AbstractQueue<E>
implements BlockingQueue<E>, java.io.Serializable {
private static final long serialVersionUID = -6903933977591709194L;
/**
* Linked list node class
*/
static class Node<E> {
E item;
/**
* One of:
* - the real successor Node
* - this Node, meaning the successor is head.next
* - null, meaning there is no successor (this is the last node)
*/
Node<E> next;
Node(E x) { item = x; }
}
/** The capacity bound, or Integer.MAX_VALUE if none */
private final int capacity;
/** Current number of elements */
private final AtomicInteger count = new AtomicInteger();
/**
* Head of linked list.
* Invariant: head.item == null
*/
transient Node<E> head;
/**
* Tail of linked list.
* Invariant: last.next == null
*/
private transient Node<E> last;
/** Lock held by take, poll, etc */
private final ReentrantLock takeLock = new ReentrantLock();
/** Wait queue for waiting takes */
private final Condition notEmpty = takeLock.newCondition();
/** Lock held by put, offer, etc */
private final ReentrantLock putLock = new ReentrantLock();
/** Wait queue for waiting puts */
private final Condition notFull = putLock.newCondition();
......
}
static class Node<E>
Node<E> next;
private final int capacity;
private final AtomicInteger count = new AtomicInteger();
transient Node<E> head;
private transient Node<E> last;
private final ReentrantLock takeLock = new ReentrantLock();
private final Condition notEmpty = takeLock.newCondition();
private final ReentrantLock putLock = new ReentrantLock();
private final Condition notFull = putLock.newCondition();
initialization
public LinkedBlockingQueue() {
this(Integer.MAX_VALUE);
}
public LinkedBlockingQueue(int capacity) {
if (capacity <= 0) throw new IllegalArgumentException();
this.capacity = capacity;
last = head = new Node<E>(null);
}
public LinkedBlockingQueue(Collection<? extends E> c) {
this(Integer.MAX_VALUE);
final ReentrantLock putLock = this.putLock;
putLock.lock(); // Never contended, but necessary for visibility
try {
int n = 0;
for (E e : c) {
if (e == null)
throw new NullPointerException();
if (n == capacity)
throw new IllegalStateException("Queue full");
enqueue(new Node<E>(e));
++n;
}
count.set(n);
} finally {
putLock.unlock();
}
}
边栏推荐
- 记录一次压测经验总结
- 2039: [Bluebridge cup 2022 preliminaries] Li Bai's enhanced version (dynamic planning)
- STM32F103ZE+SHT30检测环境温度与湿度(IIC模拟时序)
- 使用Thread类和Runnable接口实现多线程的区别
- c语言神经网络基本代码大全及其含义
- Dbsync adds support for mongodb and ES
- y58.第三章 Kubernetes从入门到精通 -- 持续集成与部署(三一)
- 接口间调用为什么要用json、fastjson怎么赋值的、fastjson [email protected]映射关系问题
- AOSP ~Binder 通信原理 (一) - 概要
- 使用知云阅读器翻译统计遗传学书籍
猜你喜欢
U++ 游戏类 学习笔记
Function pointer and pointer function in C language
Full link voltage test: the dispute between shadow database and shadow table
Decorator basic learning 02
[email protected] Mapping relatio"/>
Why JSON is used for calls between interfaces, how fastjson is assigned, fastjson 1.2 [email protected] Mapping relatio
HarmonyOS第四次培训
CentOS 7.9安装Oracle 21c历险记
Ansible报错:“msg“: “Invalid/incorrect password: Permission denied, please try again.“
指针与数组在函数中输入实现逆序输出
SQL injection HTTP header injection
随机推荐
JS 的 try catch finally 中 return 的执行顺序
Knapsack problem unrelated to profit (depth first search)
QT控件样式系列(一)之QSlider
c语言神经网络基本代码大全及其含义
Stm32f103ze+sht30 detection of ambient temperature and humidity (IIC simulation sequence)
STM32F103ZE+SHT30检测环境温度与湿度(IIC模拟时序)
线程同步的两个方法
SQL injection HTTP header injection
Operand of null-aware operation ‘!‘ has type ‘SchedulerBinding‘ which excludes null.
3. Type of fund
如何设计 API 接口,实现统一格式返回?
背包问题(01背包,完全背包,动态规划)
NiO related knowledge points (I)
接口间调用为什么要用json、fastjson怎么赋值的、fastjson [email protected]映射关系问题
JS variable
app内嵌h5---iphone软键盘遮挡输入文字
Comparison between thread and runnable in creating threads
Salesforce 容器化 ISV 场景下的软件供应链安全落地实践
U++4 interface learning notes
Is PMP really useful?