并发队列之ConcurrentLinkedQueue

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

并发队列之ConcurrentLinkedQueue_第1张图片

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

ConcurrentLinkedQueue的重要方法:

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

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

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


下面是简单的使用方法:

并发队列之ConcurrentLinkedQueue_第2张图片

下面是ConcurrentLinkedQueue的文档说明:

ConcurrentLinkedQueue文档说明:

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


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


你可能感兴趣的:(Java多线程)