当前位置:网站首页>LinkedBlockingQueue源码分析-初始化
LinkedBlockingQueue源码分析-初始化
2022-07-06 23:13:00 【InfoQ】
LinkedBlockingQueue特点
- 基于链表实现的阻塞队列,底层的数据结构为链表
- 基于链表实现先入先出的队列,新元素放在队尾,从队头部获取元素
- 链表大小在初始化的时候可以设置大小,默认为 Integer 的最大值
- 可以使用Iterator 进行迭代
属性
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();初始化
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();
}
}
边栏推荐
- Operand of null-aware operation ‘!‘ has type ‘SchedulerBinding‘ which excludes null.
- Liste des hôtes d'inventaire dans ansible (je vous souhaite des fleurs et de la romance sans fin)
- Factor analysis r practice (with R installation tutorial and code)
- CentOS 7.9安装Oracle 21c历险记
- [Yugong series] go teaching course 005 variables in July 2022
- PLC Analog output analog output FB analog2nda (Mitsubishi FX3U)
- 高手勿进!写给初中级程序员以及还在大学修炼的“准程序员”的成长秘籍
- 【二叉树】二叉树寻路
- ASP. Net MVC - resource cannot be found error - asp Net MVC – Resource Cannot be found error
- sublime使用技巧
猜你喜欢

A simple and beautiful regression table is produced in one line of code~

Leetcode(46)——全排列

Sublime tips

【愚公系列】2022年7月 Go教学课程 005-变量

Analysis -- MySQL statement execution process & MySQL architecture

U++4 interface learning notes

Function pointer and pointer function in C language

pmp真的有用吗?

3GPP信道模型路损基础知识

【问道】编译原理
随机推荐
批量归一化(标准化)处理
如何设计 API 接口,实现统一格式返回?
Leetcode(417)——太平洋大西洋水流问题
Operand of null-aware operation ‘!‘ has type ‘SchedulerBinding‘ which excludes null.
Pointer and array are input in function to realize reverse order output
STM32 system timer flashing LED
[Android kotlin collaboration] use coroutinecontext to realize the retry logic after a network request fails
Monitoring cannot be started after Oracle modifies the computer name
If you‘re running pod install manually, make sure flutter pub get is executed first.
Leetcode(46)——全排列
A row of code r shows the table of Cox regression model
最全常用高数公式
指针与数组在函数中输入实现逆序输出
JS variable
window定时计划任务
Ansible reports an error: "MSG": "invalid/incorrect password: permission denied, please try again“
史上最全学习率调整策略lr_scheduler
R descriptive statistics and hypothesis testing
Leetcode longest public prefix
ASP. Net MVC - resource cannot be found error - asp Net MVC – Resource Cannot be found error