欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

【JAVA并发编程】LinkedBlockingQueue原理

程序员文章站 2022-06-27 20:09:15
LinkedBlockingQueue原理最近在看并发编程的知识,比如ConcurrentHashMap、ReentrantLock等知识,现在分析一下LinkedBlockingQueue的原理1、简介在学习JAVA集合的时候,应该都学习过LinkedList和ArrayList,二者的区别是底层实现数据结构不一样,LinkedList是通过链表实现的,ArrayList是通过数组实现的。所以相对于基本集合类来说,LinkedBlockingQueue和相对应的ArrayBlockingQueue一...

LinkedBlockingQueue原理

最近在看并发编程的知识,比如ConcurrentHashMap、ReentrantLock等知识,现在分析一下LinkedBlockingQueue的原理

1、简介

在学习JAVA集合的时候,应该都学习过LinkedList和ArrayList,二者的区别是底层实现数据结构不一样,LinkedList是通过链表实现的,ArrayList是通过数组实现的。所以相对于基本集合类来说,LinkedBlockingQueue和相对应的ArrayBlockingQueue一样,底层数据结果不一样,LinkedBlockingQueue和LinkedList一样,内部是基于链表来存放元素,而ArrayBlockingQueue则和ArrayList一样,内部是基于数组来存放元素的。

LinkedBlockingQueu实现了BlockingQueue接口,下面可以看一下简单的关系继承图,LinkedBlockingQueue是通过继承AbstractQueue抽象类和实现BlockingQueue
【JAVA并发编程】LinkedBlockingQueue原理

LinkedBlockingQueue不同于ArrayBlockingQueue,它如果不指定容量,默认是Integer.MAX_VALUE大小,如下代码

    public LinkedBlockingQueue() {
        this(2147483647);//Integer.MAX_VALUE = 2147483647
    }

    public LinkedBlockingQueue(int var1) {
        this.count = new AtomicInteger();
        this.takeLock = new ReentrantLock();
        this.notEmpty = this.takeLock.newCondition();
        this.putLock = new ReentrantLock();
        this.notFull = this.putLock.newCondition();
        if (var1 <= 0) {
            throw new IllegalArgumentException();
        } else {
            this.capacity = var1;
            this.last = this.head = new LinkedBlockingQueue.Node((Object)null);
        }
    }

本文地址:https://blog.csdn.net/qq_19940807/article/details/107578928