国产成人AV无码一二三区,少女1到100集,国产精品久久久久精品综合紧,巜公妇之诱感肉欲HD在线播放

文章 > java基础 > linkedblockingqueue在java中的原理

linkedblockingqueue在java中的原理

头像

小妮浅浅

2021-01-11 14:52:562862浏览 · 0收藏 · 0评论

我们在说队列顺序的时候,linkedblockingqueue先进先出的顺序,显示和我们常规的先进再出的理念有所不同。这里我们需要深入到linkedblockingqueue的原理中,去讨论这种顺序机制的存在。接下来我们会从其主要属性、构造函数以及继承结构中,为大家找寻linkedblockingqueu的原理。

1.主要属性

// 容量
private final int capacity;
 
// 元素数量
private final AtomicInteger count = new AtomicInteger();
 
// 链表头
transient Node<E> head;
 
// 链表尾
private transient Node<E> last;
 
// take锁
private final ReentrantLock takeLock = new ReentrantLock();
 
// notEmpty条件
// 当队列无元素时,take锁会阻塞在notEmpty条件上,等待其它线程唤醒
private final Condition notEmpty = takeLock.newCondition();
 
// 放锁
private final ReentrantLock putLock = new ReentrantLock();
 
// notFull条件
// 当队列满了时,put锁会会阻塞在notFull上,等待其它线程唤醒
private final Condition notFull = putLock.newCondition();

1)capacity,有容量,可以理解为LinkedBlockingQueue是有界队列

2)head, last,链表头、链表尾指针

3)takeLock,notEmpty,take锁及其对应的条件

4)putLock, notFull,put锁及其对应的条件

(5)入队、出队使用两个不同的锁控制,锁分离,提高效率

2.构造函数

public LinkedBlockingQueue() {
    this(Integer.MAX_VALUE);
}
 
// 限制队列容量,并初始化队列的 head 和 last 节点.
public LinkedBlockingQueue(int capacity) {
    if (capacity <= 0) throw new IllegalArgumentException();
    this.capacity = capacity;
    last = head = new Node<E>(null);
}
 
// LinkedBlockingQueue(int capacity)初始化,然后加写锁,将集合c一个个入队.
public LinkedBlockingQueue(Collection<? extends E> c) {
    this(Integer.MAX_VALUE);
    final ReentrantLock putLock = this.putLock;
    putLock.lock(); // 写锁(以重入锁实现,对队尾的插入进行控制)
    try {
        int n = 0;
        for (E e : c) {
        	// null元素抛出异常
            if (e == null)
                throw new NullPointerException();
            if (n == capacity)
                throw new IllegalStateException("Queue full");
            enqueue(new Node<E>(e)); //将元素封装成Node,入队
            ++n;
        }
        count.set(n);
    } finally {
        putLock.unlock(); // 释放
    }
}

3.继承结构

以上就是linkedblockingqueue在java中的原理展示,我们通过其函数组成和结构示意图,对linkedblockingqueue能够有大体上的了解,尤其是我们说它是链表结构,想必现在大家已经能够理解原理了。

关注

关注公众号,随时随地在线学习

本教程部分素材来源于网络,版权问题联系站长!

站立式插插的正确方法| 美国《性船》无删减| 夜夜高潮次次欢爽AV女视频| 妈妈装睡配合孩子阴阳调和 | 《美式保罗1980》完整版| 《伦敦空姐美版2023》| 真人版结婚之夜女性教育PPT| 《强壮的公2做爱观看| 《破外女》高清完整版| 粘液共生1~3集免费观看动漫| 《共享弟夫》动漫在线观看免费| 善良的邻居的妻子3| 成全高清免费观看MV| CSGO暴躁妹妹高清| 1尿到0的直肠里| 明星记忆修改系统| 《你邻居的妻子》电视剧| 偶偶网| 男寝的宝贝BY金银花露笔趣阁| 女孩发育图片(真人)| 妈妈你真棒里面的插曲叫什么 | 《男医生的特殊治疗》| 理伦片丰满妓女院| 《炸裂吧!巨棒》免费阅读漫画 | 当着老公的面被维修工欺负| 免费的行情网站WWW下载大全| 以后不许穿胸罩H| 麻花星空MV高清在线播放| 鹿鞭丸的功效和作用| 成品PPT网站大片| 黑料| 麻豆精品无码国产在线播放| 豆传媒剧国产MV有什么特点| 他的手渐渐地也开始不安分起来| 灭火宝贝2:决战丛林| 正阳门下电视剧全集免费观看| 门卫老头吮她的花蒂的主演是谁| TOUPAIZIPAI| 父母儿女媳妇一起来| 荡货夹的这么紧欠C调教视频| 芬太尼关税是怎么回事