轉自:http://blog.csdn.net/u010142437/article/details/22734857 一、類結構: 類型參數:E - 在此 collection 中保持的元素類型所有已實現的介面: Serializable, Iterable<E>, Collection<E>, ...
轉自:http://blog.csdn.net/u010142437/article/details/22734857
一、類結構:
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 方法不是 一個固定時間操作。由於這些隊列的非同步特性,確定當前元素的數量需要遍歷這些元素。
此類及其迭代器實現了 Collection
和 Iterator
介面的所有可選 方法。
記憶體一致性效果:當存在其他併發 collection 時,將對象放入 ConcurrentLinkedQueue
之前的線程中的操作 happen-before 隨後通過另一線程從 ConcurrentLinkedQueue
訪問或移除該元素的操作。
此類是 Java Collections Framework 的成員。
三、構造方法: 1、public ConcurrentLinkedQueue() 創建一個最初為空的 ConcurrentLinkedQueue。
2、public ConcurrentLinkedQueue(Collection<? extends E> c)
創建一個最初包含給定 collection 元素的 ConcurrentLinkedQueue,按照此 collection 迭代器的遍歷順序來添加元素。
- 參數:
c
- 最初包含的元素 collection- 拋出:
- NullPointerException - 如果指定 collection 或其任何元素為 null
四、方法詳細: 1、public boolean add(E e) 將指定元素插入此隊列的尾部。
指定者:介面 Collection<E>
中的 add
指定者:介面 Queue<E>
中的 add、
覆蓋:類 AbstractQueue<E>
中的 add
參數:o
- 要添加的元素
返回:true(根據 Collection.add(E)
的規定)
拋出: NullPointerException - 如果指定元素為 null
2、public boolean offer(E e) 將指定元素插入此隊列的尾部。
指定者:介面 Queue<E>
中的 offer
參數:e
- 要添加的元素
返回:true(根據 Queue.offer(E)
的規定)
拋出: NullPointerException
- 如果指定元素為 null
3、public E poll() 從介面 Queue
複製的描述 : 獲取並移除此隊列的頭,如果此隊列為空,則返回 null。
指定者:介面 Queue<E>
中的 poll
返回:隊列的頭,如果此隊列為空,則返回 null
4、public E peek() 從介面 Queue
複製的描述 :獲取但不移除此隊列的頭;如果此隊列為空,則返回 null。
指定者:介面 Queue<E>
中的 peek
返回:此隊列的頭;如果此隊列為空,則返回 null
5、public boolean isEmpty() 如果此隊列不包含任何元素,則返回 true。
指定者:介面 Collection<E>
中的 isEmpty
覆蓋:類 AbstractCollection<E>
中的 isEmpty
返回:如果此隊列不包含任何元素,則返回 true
6、public int size() 返回此隊列中的元素數量。如果此隊列包含的元素數大於 Integer.MAX_VALUE,則返回Integer.MAX_VALUE。
需要小心的是,與大多數 collection 不同,此方法不是 一個固定時間操作。由於這些隊列的非同步特性,確定當前的元素數需要進行一次花費 O(n) 時間的遍歷。
指定者:介面 Collection<E>
中的 size
指定者:類 AbstractCollection<E>
中的 size
返回:此隊列中的元素數
7、public boolean contains(Object o) 如果此隊列包含指定元素,則返回 true。更確切地講,當且僅當此隊列至少包含一個滿足 o.equals(e) 的元素 e 時,返回 true。
指定者:介面 Collection<E>
中的 contains
覆蓋:類 AbstractCollection<E>
中的 contains
參數:o
- 要檢查是否包含於此隊列的對象
返回:如果此隊列包含指定元素,則返回 true
8、public boolean remove(Object o) 從隊列中移除指定元素的單個實例(如果存在)。更確切地講,如果此隊列包含一個或多個滿足 o.equals(e) 的元素 e,則移除一個這樣的元素。如果此隊列包含指定元素(或者此隊列由於調用而發生更改),則返回 true。
指定者:介面 Collection<E>
中的 remove
覆蓋:類 AbstractCollection<E>
中的 remove
參數:o
- 將從此隊列中移除的元素(如果存在)
返回:如果此隊列由於調用而發生更改,則返回 true
9、public Object[] toArray() 返回以恰當順序包含此隊列所有元素的數組。
由於此隊列並不維護對返回數組的任何引用,因而它將是“安全的”。(換句話說,此方法必須分配一個新數組)。因此,調用者可以隨意修改返回的數組。
此方法充當基於數組的 API 與基於 collection 的 API 之間的橋梁。
指定者:介面 Collection<E>
中的 toArray
覆蓋:類 AbstractCollection<E>
中的 toArray
返回:包含此隊列所有元素的數組
10、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
11、public Iterator<E> iterator() 返回在此隊列元素上以恰當順序進行迭代的迭代器。返回的迭代器是一個“弱一致”迭代器,它不會拋出 ConcurrentModificationException
,並且可保證遍歷迭代器構造時存在的元素,此外還可能(但並不保證)反映構造後的所有修改。
指定者:介面 Iterable<E>
中的 iterator
指定者:介面 Collection<E>
中的 iterator
指定者:類 AbstractCollection<E>
中的 iterator
返回:在此隊列元素上以恰當順序進行迭代的迭代器