JavaTM 2 Platform
Standard Ed. 6

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 介面的所有可選 方法。

記憶體一致性效果:當存在其他共時 collection 時,將物件放入 ConcurrentLinkedQueue 之前的執行緒中的操作 happen-before 隨後通過另一執行緒從 ConcurrentLinkedQueue 存取或移除該元素的操作。

此類別是 Java Collections Framework 的成員。

從以下版本開始:
1.5
另請參見:
序列化表格

建構子摘要
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)
          返回以恰當順序包含此佇列所有元素的陣列;返回陣列的運行時型別是指定陣列的運行時型別。
 
從類別 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 - 如果指定 collection 或其任何元素為 null
方法詳細資訊

add

public boolean add(E e)
將指定元素插入此佇列的尾部。

指定者:
介面 Collection<E> 中的 add
指定者:
介面 Queue<E> 中的 add
覆寫:
類別 AbstractQueue<E> 中的 add
參數:
o - 要添加的元素
返回:
true(根據 Collection.add(E) 的規定)
拋出:
NullPointerException - 如果指定元素為 null

offer

public boolean offer(E e)
將指定元素插入此佇列的尾部。

指定者:
介面 Queue<E> 中的 offer
參數:
e - 要添加的元素
返回:
true(根據 Queue.offer(E) 的規定)
拋出:
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()
如果此佇列不包含任何元素,則返回 true

指定者:
介面 Collection<E> 中的 isEmpty
覆寫:
類別 AbstractCollection<E> 中的 isEmpty
返回:
如果此佇列不包含任何元素,則返回 true

size

public int size()
返回此佇列中的元素數量。如果此佇列包含的元素數大於 Integer.MAX_VALUE,則返回 Integer.MAX_VALUE

需要小心的是,與大多數 collection 不同,此方法不是 一個固定時間操作。由於這些佇列的非同步特性,確定當前的元素數需要進行一次花費 O(n) 時間的遍歷。

指定者:
介面 Collection<E> 中的 size
指定者:
類別 AbstractCollection<E> 中的 size
返回:
此佇列中的元素數

contains

public boolean contains(Object o)
如果此佇列包含指定元素,則返回 true。更確切地講,當且僅當此佇列至少包含一個滿足 o.equals(e) 的元素 e 時,返回 true

指定者:
介面 Collection<E> 中的 contains
覆寫:
類別 AbstractCollection<E> 中的 contains
參數:
o - 要檢查是否包含於此佇列的物件
返回:
如果此佇列包含指定元素,則返回 true

remove

public boolean remove(Object o)
從佇列中移除指定元素的單個實例(如果存在)。更確切地講,如果此佇列包含一個或多個滿足 o.equals(e) 的元素 e,則移除一個這樣的元素。如果此佇列包含指定元素(或者此佇列由於調用而發生更改),則返回 true

指定者:
介面 Collection<E> 中的 remove
覆寫:
類別 AbstractCollection<E> 中的 remove
參數:
o - 將從此佇列中移除的元素(如果存在)
返回:
如果此佇列由於調用而發生更改,則返回 true

toArray

public Object[] toArray()
返回以恰當順序包含此佇列所有元素的陣列。

由於此佇列並不維護對返回陣列的任何參考,因而它將是「安全的」。(換句話說,此方法必須分派一個新陣列)。因此,調用者可以隨意修改返回的陣列。

此方法充當基於陣列的 API 與基於 collection 的 API 之間的橋樑。

指定者:
介面 Collection<E> 中的 toArray
覆寫:
類別 AbstractCollection<E> 中的 toArray
返回:
包含此佇列所有元素的陣列

toArray

public <T> T[] toArray(T[] a)
返回以恰當順序包含此佇列所有元素的陣列;返回陣列的運行時型別是指定陣列的運行時型別。如果指定的陣列能容納佇列,則將該佇列返回此處。否則,將分派一個具有指定陣列的運行時型別和此佇列大小的新陣列。

如果指定的陣列能容納佇列,並有剩餘的空間(即陣列的元素比佇列多),那麼會將緊接佇列尾部的元素設置為 null

toArray() 方法一樣,此方法充當基於陣列的 API 與基於 collection 的 API 之間的橋樑。更進一步說,此方法允許對輸出陣列的運行時型別進行精確控制,在某些情況下,這可以用來節省分派開銷。

假定 x 是只包含字元串的一個已知佇列。以下程式碼用來將該佇列轉儲到一個新分派的 String 陣列:

     String[] y = x.toArray(new String[0]);
注意,toArray(new Object[0])toArray() 在功能上是相同的。

指定者:
介面 Collection<E> 中的 toArray
覆寫:
類別 AbstractCollection<E> 中的 toArray
參數:
a - 將用來存儲佇列元素的陣列(如果該陣列足夠大);否則,將為此分派一個具有相同運行時型別的新陣列
返回:
包含此佇列所有元素的陣列
拋出:
ArrayStoreException - 如果指定陣列的運行時型別不是此佇列中每個元素的運行時型別的父級類別型
NullPointerException - 如果指定陣列為 null

iterator

public Iterator<E> iterator()
返回在此佇列元素上以恰當順序進行迭代的迭代器。返回的迭代器是一個“弱一致”迭代器,它不會拋出 ConcurrentModificationException,並且可保證遍歷迭代器建構時存在的元素,此外還可能(但並不保證)反映建構後的所有修改。

指定者:
介面 Iterable<E> 中的 iterator
指定者:
介面 Collection<E> 中的 iterator
指定者:
類別 AbstractCollection<E> 中的 iterator
返回:
在此佇列元素上以恰當順序進行迭代的迭代器

JavaTM 2 Platform
Standard Ed. 6

提交錯誤或意見

版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only