并发队列之ConcurrentLinkedQueue

先简单的介绍一下:在并发队列上JDK提供了两套实现,一个是以ConcurrentLinkedQueue为代表的高性能队列(这篇推文将要介绍的队列),一个是以BlockingQueue接口为代表的阻塞队列,无论哪一种都继承自Queue接口。

那么下面将介绍一下高性能的ConcurrentLinkedQueue:它是一个适用于高并发场景下的队列,通过无锁的方式,实现了高并发状态下的高性能,通常ConcurrentLinkedQueue性能好于BlockingQueue。它是一个机遇链接节点的无界线程安全队列,因为是无界的,所以可以一直添加元素。该队列的元素遵循先进先出的原则。头是最先加入的,尾是最近加入的,还要注意的是该队列不允许null元素

ConcurrentLinkedQueue的重要方法:

    add()和offer()都是加入元素的方法(在ConcurrentLinkedQueue中,这两个方法没有任何区别)

    poll()和peek()都是取头元素节点,区别在于前者会删除元素,后者不会

    size()和isEmpty(),如果是判断队列是否还有元素,不建议使用size(),因为这个方法必定要遍历队列,这样的效率不高性能不好。


下面是简单的使用方法:


下面是ConcurrentLinkedQueue的文档说明:

ConcurrentLinkedQueue文档说明:

构造方法摘要
ConcurrentLinkedQueue() 
          创建一个最初为空的 ConcurrentLinkedQueue
ConcurrentLinkedQueue(Collection<? extends E> c) 
          创建一个最初包含给定 collection 元素的 ConcurrentLinkedQueue,按照此 collection 迭代器的遍历顺序来添加元素。


方法摘要
 boolean add(E e) 
          将指定元素插入此队列的尾部。
 boolean contains(Object o) 
          如果此队列包含指定元素,则返回 true
 boolean isEmpty() 
          如果此队列不包含任何元素,则返回 true
 Iterator<E> iterator() 
          返回在此队列元素上以恰当顺序进行迭代的迭代器。
 boolean offer(E e) 
          将指定元素插入此队列的尾部。
 E peek() 
          获取但不移除此队列的头;如果此队列为空,则返回 null
 E poll() 
          获取并移除此队列的头,如果此队列为空,则返回 null
 boolean remove(Object o) 
          从队列中移除指定元素的单个实例(如果存在)。
 int size() 
          返回此队列中的元素数量。
 Object[] toArray() 
          返回以恰当顺序包含此队列所有元素的数组。
<T> T[]
toArray(T[] a) 
          返回以恰当顺序包含此队列所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。


猜你喜欢

转载自blog.csdn.net/howinfun/article/details/80728458