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, remove
containsAll, removeAll, retainAll, toString
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
clear, containsAll, equals, hashCode, parallelStream, removeAll, removeIf, retainAll, stream
public 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
在这个队列中的元素