E - 此集合中保存的元素的类型
public class ConcurrentLinkedQueue<E> extends AbstractQueue<E> implements Queue<E>, Serializable
ConcurrentLinkedQueue是许多线程将共享对公共集合的访问的适当选择。
像大多数其他并发集合实现一样,此类不允许使用null元素。
该实现采用基于由Maged M.Michael和Michael L.S Scott的Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms描述的有效的非阻塞算法。
迭代器是弱一致的 ,返回的元素反映队列的状态在创建迭代器的某个时刻。 他们不抛出ConcurrentModificationException ,并可能与其他操作同时进行。 创建迭代器后包含在队列中的元素将被精确地返回一次。
请注意,与大多数集合不同, size方法不是一个常时操作。 由于这些队列的异步性质,确定当前元素数量需要遍历元素,因此如果在遍历期间修改此集合,则可能会报告不准确的结果。 此外,该批量操作addAll , removeAll , retainAll , containsAll , equals和toArray被原子方式执行, 不能保证。 例如,一个迭代与同时操作addAll操作可能只查看一些所添加的元素。
该类及其迭代器实现了Queue和Iterator接口的所有可选方法。
内存一致性效果:与其他并发集合一样,在将对象放入ConcurrentLinkedQueue happen-before ConcurrentLinkedQueue的线程中的ConcurrentLinkedQueue ,在另一个线程中从ConcurrentLinkedQueue访问或删除该元素之后。
这个班是Java Collections Framework的成员。
| Constructor and Description |
|---|
ConcurrentLinkedQueue()
创建一个
ConcurrentLinkedQueue为空的ConcurrentLinkedQueue。
|
ConcurrentLinkedQueue(Collection<? extends E> c)
创建一个
ConcurrentLinkedQueue最初包含给定集合的元素,以集合的迭代器的遍历顺序添加。
|
| Modifier and Type | Method and Description |
|---|---|
boolean |
add(E e)
在该队列的尾部插入指定的元素。
|
boolean |
addAll(Collection<? extends E> c)
按照指定集合的迭代器返回的顺序将指定集合中的所有元素追加到该队列的末尾。
|
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()
返回此队列中的元素数。
|
Spliterator<E> |
spliterator()
返回此队列中的元素 Spliterator 。
|
Object[] |
toArray()
以适当的顺序返回一个包含此队列中所有元素的数组。
|
<T> T[] |
toArray(T[] a)
以适当的顺序返回包含此队列中所有元素的数组;
返回的数组的运行时类型是指定数组的运行时类型。
|
clear, element, removecontainsAll, removeAll, retainAll, toStringclone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitclear, containsAll, equals, hashCode, parallelStream, removeAll, removeIf, retainAll, streampublic ConcurrentLinkedQueue()
ConcurrentLinkedQueue为空的ConcurrentLinkedQueue。
public ConcurrentLinkedQueue(Collection<? extends E> c)
ConcurrentLinkedQueue最初包含给定集合的元素,以集合的迭代器的遍历顺序添加。
c - 最初包含的元素的集合
NullPointerException - 如果指定的集合或其任何元素为空
public boolean add(E e)
IllegalStateException或返回false 。
add中的
Collection<E>
add在界面
Queue<E>
add在类别
AbstractQueue<E>
e - 要添加的元素
true (由
Collection.add(E)指定 )
NullPointerException - 如果指定的元素为空
public boolean offer(E e)
false 。
offer在界面
Queue<E>
e - 要添加的元素
true (由
Queue.offer(E)指定 )
NullPointerException - 如果指定的元素为空
public boolean isEmpty()
true 。
isEmpty在接口
Collection<E>
isEmpty在类别
AbstractCollection<E>
true如果此队列不包含元素
public int size()
Integer.MAX_VALUE元素,则返回Integer.MAX_VALUE 。
请注意,与大多数集合不同,此方法不是一个常时操作。 由于这些队列的异步性质,确定当前的元素数需要O(n)遍历。 另外,如果在执行此方法期间添加或删除元素,则返回的结果可能不准确。 因此,这种方法在并发应用程序中通常不是很有用。
size在界面
Collection<E>
size在类别
AbstractCollection<E>
public boolean contains(Object o)
true 。
更正式地,返回true如果且仅当该队列至少包含一个元素e使得o.equals(e) 。
contains在接口
Collection<E>
contains在类别
AbstractCollection<E>
o - 要检查此队列中的遏制的对象
true如果此队列包含指定的元素
public boolean remove(Object o)
e使得o.equals(e) ,如果这个队列包含一个或多个这样的元素。
如果此队列包含指定的元素(或等效地,如果此队列作为调用的结果而更改),则返回true 。
remove在界面
Collection<E>
remove在类别
AbstractCollection<E>
o - 要从此队列中删除的元素(如果存在)
true如果此队列由于调用而更改
public boolean addAll(Collection<? extends E> c)
addAll的一个队列导致IllegalArgumentException 。
addAll在接口
Collection<E>
addAll在类别
AbstractQueue<E>
c - 要插入此队列的元素
true如果此队列由于调用而更改
NullPointerException - 如果指定的集合或其任何元素为空
IllegalArgumentException - 如果集合是此队列
AbstractQueue.add(Object)
public Object[] toArray()
返回的数组将是“安全的”,因为该队列不保留对它的引用。 (换句话说,这个方法必须分配一个新的数组)。 因此,调用者可以自由地修改返回的数组。
此方法充当基于阵列和基于集合的API之间的桥梁。
toArray在界面
Collection<E>
toArray在类别
AbstractCollection<E>
public <T> T[] toArray(T[] a)
如果这个队列适合指定的数组空间(即数组比此队列更多的元素),则队列结束后的数组中的元素将设置为null 。
像toArray()方法一样,此方法充当基于数组和基于集合的API之间的桥梁。 此外,该方法允许精确地控制输出阵列的运行时类型,并且在某些情况下可以用于节省分配成本。
假设x是一个已知只包含字符串的队列。 下面的代码可以被用来将该队列转储到一个新分配的阵列String :
String[] y = x.toArray(new String[0]);
请注意, toArray(new Object[0])的功能与toArray() 。
toArray在界面
Collection<E>
toArray在类别
AbstractCollection<E>
T - 包含集合的数组的运行时类型
a - 要存储队列的元素的阵列,如果它足够大;
否则,为此目的分配相同运行时类型的新数组
ArrayStoreException - 如果指定数组的运行时类型不是此队列中每个元素的运行时类型的超类型
NullPointerException - 如果指定的数组为空
public Iterator<E> iterator()
iterator在界面
Iterable<E>
iterator在接口
Collection<E>
iterator在类别
AbstractCollection<E>
public Spliterator<E> spliterator()
Spliterator 。
返回的拼接器是weakly consistent 。
该Spliterator报告Spliterator.CONCURRENT , Spliterator.ORDERED和Spliterator.NONNULL 。
spliterator中的
Iterable<E>
spliterator在界面
Collection<E>
Spliterator实现
trySplit以允许有限的并行性。
Spliterator在这个队列中的元素
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.