无界不阻塞队列ConcurrentLinkedQueue 原理、常用方法、使用示例

目录

 

理解:可以看成是LinkedList的并发版本

底层原理:单项链表

构造方法

public ConcurrentLinkedQueue():首尾都是空的链表

public ConcurrentLinkedQueue(Collection c):把集合的元素放入链表

常用方法:

concurrentLinkedQueue.add("c");    新增元素

boolean addAll(Collection c):添加集合

boolean contains(Object o):是否包含某个元素

isEmpty():是否为空

boolean remove(Object o):移除元素

int size():现有多少元素在链表中

Object[] toArray();转换成为数组

T[] toArray(T[] a):返回数组 a的元素在集合中存在的元素的数组

 concurrentLinkedQueue.offer("d"); / 将指定元素插入到此队列的尾部。    

concurrentLinkedQueue.peek(); 检索并不移除此队列的头,如果此队列为空,则返回 null。    

concurrentLinkedQueue.poll(); //检索并移除此队列的头,如果此队列为空,则返回 null。


理解:可以看成是LinkedList的并发版本

底层原理:单项链表

特点先进先出、无界,因为无界,所以不会阻塞(能存储数量没有限制)

构造方法

public ConcurrentLinkedQueue():首尾都是空的链表

 

public ConcurrentLinkedQueue(Collection<? extends E> c):把集合的元素放入链表

常用方法:

concurrentLinkedQueue.add("c");    新增元素

 

boolean addAll(Collection<? extends E> c):添加集合

 

boolean contains(Object o):是否包含某个元素

 

isEmpty():是否为空

 

boolean remove(Object o):移除元素

 

int size():现有多少元素在链表中

 

Object[] toArray();转换成为数组

 

<T> T[] toArray(T[] a):返回数组 a的元素在集合中存在的元素的数组

 

 concurrentLinkedQueue.offer("d"); / 将指定元素插入到此队列的尾部。    

 

concurrentLinkedQueue.peek(); 检索并不移除此队列的头,如果此队列为空,则返回 null。    

 

concurrentLinkedQueue.poll(); //检索并移除此队列的头,如果此队列为空,则返回 null。

demo

public class Test {
    public static void main(String[] args) {
        ConcurrentLinkedQueue queue = new ConcurrentLinkedQueue();
        queue.add(1);
        queue.add(2);
        queue.add(3);
        queue.add(4);
        queue.add(5);
        queue.offer(6);
        System.out.println(queue);
        System.out.println("peek得到头元素不删除"+queue.peek());
        System.out.println("peek得到头元素不删除"+queue);
        System.out.println("peek得到头元素并删除"+queue.poll());
        System.out.println(queue);
    }
}

结果

[1, 2, 3, 4, 5, 6]
peek得到头元素不删除1
peek得到头元素不删除[1, 2, 3, 4, 5, 6]
peek得到头元素并删除1
[2, 3, 4, 5, 6]

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章