所有类


java.util.concurrent
类 ConcurrentLinkedQueue<E>

java.lang.Object
  继承者 java.util.AbstractCollection<E>
      继承者 java.util.AbstractQueue<E>
          继承者 java.util.concurrent.ConcurrentLinkedQueue<E>
类型参数:
E - 在此 collection 中保持的元素类型
所有已实现的接口:
Serializable, Iterable<E>, Collection<E>, Queue<E>

public class ConcurrentLinkedQueue<E>
   
   
   
   
   
extends AbstractQueue<E>
implements Queue<E>, Serializable

一个基于链接节点的、无界的、线程安全的队列。此队列按照 FIFO(先进先出)原则对元素进行排序。队列的头部 是队列中时间最长的元素。队列的尾部 是队列中时间最短的元素。新的元素插入到队列的尾部,队列检索操作从队列头部获得元素。当许多线程共享访问一个公共 collection 时,ConcurrentLinkedQueue 是一个恰当的选择。此队列不允许 null 元素。

此实现采用了有效的“无等待 (wait-free)”算法,该算法基于 Maged M. Michael 和 Michael L. Scott 撰写的《 Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms》中描述的算法。

需要小心的是,与大多数 collection 不同,size 方法不是 一个固定时间的操作。由于这些队列的异步特性,确定当前元素的数量需要遍历这些元素。

此类及其迭代器实现了 CollectionIterator 接口的所有可选 方法。

此类是 Java Collections Framework 的成员。

从以下版本开始:
1.5
另请参见:
序列化表格

构造方法摘要
ConcurrentLinkedQueue()
          创建一个最初为空的 ConcurrentLinkedQueue
ConcurrentLinkedQueue(Collection<? extends E> c)
          创建一个最初包含给定 collection 的元素的 ConcurrentLinkedQueue,按照此 collection 迭代器的遍历顺序来添加元素。
 
方法摘要
 boolean add(E o)
          将指定元素添加到此队列的尾部。
 boolean contains(Object o)
          如果此 collection 包含指定的元素,则返回 true
 boolean isEmpty()
          如果此 collection 不包含元素,则返回 true
 Iterator<E> iterator()
          返回在此队列中的元素上以正确顺序进行迭代的迭代器。
 boolean offer(E o)
          将指定元素插入到此队列的尾部。
 E peek()
          检索,但是不移除此队列的头,如果此队列为空,则返回 null
 E poll()
          检索并移除此队列的头,如果此队列为空,则返回 null
 boolean remove(Object o)
          从此 collection 中移除指定元素的单个实例(如果存在)(可选操作)。
 int size()
          返回此队列中的元素数量。
 Object[] toArray()
          返回包含此 collection 中所有元素的数组。
<T> T[]
toArray(T[] a)
          返回包含此 collection 中所有元素的数组;返回数组的运行时类型是指定数组的类型。
 
从类 java.util.AbstractQueue 继承的方法
addAll, clear, element, remove
 
从类 java.util.AbstractCollection 继承的方法
containsAll, removeAll, retainAll, toString
 
从类 java.lang.Object 继承的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
从接口 java.util.Queue 继承的方法
element, remove
 
从接口 java.util.Collection 继承的方法
addAll, clear, containsAll, equals, hashCode, removeAll, retainAll
 

构造方法详细信息

ConcurrentLinkedQueue

public ConcurrentLinkedQueue()
创建一个最初为空的 ConcurrentLinkedQueue


ConcurrentLinkedQueue

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

参数:
c - 最初包含的元素 collection
抛出:
NullPointerException - 如果 cc 中的所有元素为 null
方法详细信息

add

public boolean add(E o)
将指定元素添加到此队列的尾部。

指定者:
接口 Collection<E> 中的 add
覆盖:
AbstractQueue<E> 中的 add
参数:
o - 要添加的元素
返回:
true(按照 Collection.add 的常规协定)。
抛出:
NullPointerException - 如果指定元素为 null

offer

public boolean offer(E o)
将指定元素插入到此队列的尾部。

指定者:
接口 Queue<E> 中的 offer
参数:
o - 要添加的元素
返回:
true(按照 Queue.offer 的常规协定)。
抛出:
NullPointerException - 如果指定元素为 null

poll

public E poll()
从接口 Queue 复制的描述
检索并移除此队列的头,如果此队列为空,则返回 null

指定者:
接口 Queue<E> 中的 poll
返回:
队列的头,如果此队列为空,则返回 null

peek

public E peek()
从接口 Queue 复制的描述
检索,但是不移除此队列的头,如果此队列为空,则返回 null

指定者:
接口 Queue<E> 中的 peek
返回:
队列的头,如果此队列为空,则返回 null

isEmpty

public boolean isEmpty()
从类 AbstractCollection 复制的描述
如果此 collection 不包含元素,则返回 true

此实现返回 size() == 0

指定者:
接口 Collection<E> 中的 isEmpty
覆盖:
AbstractCollection<E> 中的 isEmpty
返回:
如果此 collection 不包含元素,则返回 true

size

public int size()
返回此队列中的元素数量。如果此队列包含的元素数大于 Integer.MAX_VALUE,则返回 Integer.MAX_VALUE

需要小心的是,与大多数 collection 不同,此方法不是 一个固定时间的操作。由于这些队列的异步特性,确定当前的元素数需要进行一次花费 O(n) 时间的遍历。

指定者:
接口 Collection<E> 中的 size
指定者:
AbstractCollection<E> 中的 size
返回:
此队列中的元素数。

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部