- java.lang.Object
-
- java.util.AbstractCollection<E>
-
- java.util.AbstractQueue<E>
-
- java.util.concurrent.LinkedBlockingQueue<E>
-
- 参数类型
-
E
- 保存在此队列中的元素的类型
- All Implemented Interfaces:
-
Serializable
,Iterable<E>
,Collection<E>
,BlockingQueue<E>
,Queue<E>
public class LinkedBlockingQueue<E> extends AbstractQueue<E> implements BlockingQueue<E>, Serializable
基于链接节点的可选限定的blocking queue 。 这个队列排列元素FIFO(先进先出)。 队列的头部是队列中最长的元素。 队列的尾部是队列中最短时间的元素。 新元素插入队列的尾部,队列检索操作获取队列头部的元素。 链接队列通常具有比基于阵列的队列更高的吞吐量,但在大多数并发应用程序中的可预测性能较低。可选容量绑定构造函数参数用作防止过多队列扩展的一种方法。 容量,如果未指定,等于
Integer.MAX_VALUE
。 链接节点在每次插入时动态创建,除非这将使队列高于容量。该类及其迭代器实现
Collection
和Iterator
接口的所有可选方法。这个班是Java Collections Framework的会员。
- 从以下版本开始:
- 1.5
- 另请参见:
- Serialized Form
-
-
构造方法摘要
构造方法 Constructor 描述 LinkedBlockingQueue()
创建LinkedBlockingQueue
,容量为Integer.MAX_VALUE
。LinkedBlockingQueue(int capacity)
创建一个给定(固定)容量的LinkedBlockingQueue
。LinkedBlockingQueue(Collection<? extends E> c)
创建LinkedBlockingQueue
容量为Integer.MAX_VALUE
,最初包含给定集合中的元素,添加在收集迭代器的遍历顺序。
-
方法摘要
所有方法 接口方法 具体的方法 Modifier and Type 方法 描述 void
clear()
从这个队列中原子地删除所有的元素。boolean
contains(Object o)
如果此队列包含指定的元素,则返回true
。int
drainTo(Collection<? super E> c)
从该队列中删除所有可用的元素,并将它们添加到给定的集合中。int
drainTo(Collection<? super E> c, int maxElements)
最多从该队列中删除给定数量的可用元素,并将它们添加到给定的集合中。void
forEach(Consumer<? super E> action)
对Iterable
每个元素执行给定的操作,直到所有元素都被处理或动作引发异常。Iterator<E>
iterator()
以正确的顺序返回该队列中的元素的迭代器。boolean
offer(E e)
插入指定的元素在这个队列的尾部,如果有可能立即这样做不超过该队列的容量,返回true
在成功和false
如果此队列已满。boolean
offer(E e, long timeout, TimeUnit unit)
在该队列的尾部插入指定的元素,必要时等待指定的等待时间才能使空间变得可用。E
peek()
检索但不删除此队列的头,如果此队列为空,则返回null
。E
poll()
检索并删除此队列的头部,如果此队列为空,则返回null
。E
poll(long timeout, TimeUnit unit)
检索并删除此队列的头,等待指定的等待时间(如有必要)使元素变为可用。void
put(E e)
在该队列的尾部插入指定的元素,如果需要,等待空格变为可用。int
remainingCapacity()
返回此队列可以理想地(在没有内存或资源限制)的情况下接受而不阻止的附加元素数。boolean
remove(Object o)
从该队列中删除指定元素的单个实例(如果存在)。boolean
removeAll(Collection<?> c)
删除指定集合中包含的所有此集合的元素(可选操作)。boolean
removeIf(Predicate<? super E> filter)
删除满足给定谓词的此集合的所有元素。boolean
retainAll(Collection<?> c)
仅保留此集合中包含在指定集合中的元素(可选操作)。int
size()
返回此队列中的元素数。Spliterator<E>
spliterator()
返回此队列中的元素Spliterator
。E
take()
检索并删除此队列的头,如有必要,等待元素可用。Object[]
toArray()
以适当的顺序返回一个包含此队列中所有元素的数组。<T> T[]
toArray(T[] a)
以适当的顺序返回包含此队列中所有元素的数组; 返回的数组的运行时类型是指定数组的运行时类型。String
toString()
返回此集合的字符串表示形式。-
Methods inherited from class java.util.AbstractCollection
containsAll, isEmpty
-
Methods inherited from class java.util.AbstractQueue
add, addAll, element, remove
-
Methods inherited from interface java.util.concurrent.BlockingQueue
add
-
Methods inherited from interface java.util.Collection
addAll, containsAll, equals, hashCode, isEmpty, parallelStream, stream
-
-
-
-
构造方法详细信息
-
LinkedBlockingQueue
public LinkedBlockingQueue()
创建LinkedBlockingQueue
,容量为Integer.MAX_VALUE
。
-
LinkedBlockingQueue
public LinkedBlockingQueue(int capacity)
创建一个具有给定(固定)容量的LinkedBlockingQueue
。- 参数
-
capacity
- 这个队列的容量 - 异常
-
IllegalArgumentException
- 如果capacity
不大于零
-
LinkedBlockingQueue
public LinkedBlockingQueue(Collection<? extends E> c)
创建LinkedBlockingQueue
容量为Integer.MAX_VALUE
,最初包含给定集合中的元素,添加在收集迭代器的遍历顺序。- 参数
-
c
- 最初包含的元素的集合 - 异常
-
NullPointerException
- 如果指定的集合或其任何元素为空
-
-
方法详细信息
-
size
public int size()
返回此队列中的元素数。- Specified by:
-
size
在界面Collection<E>
- Specified by:
-
size
在AbstractCollection<E>
- 结果
- 此队列中的元素数
-
remainingCapacity
public int remainingCapacity()
返回此队列可以理想地(在没有内存或资源限制)的情况下接受而不阻止的附加元素数。 这总是等于该队列的初始容量少于此队列的当前size
。请注意,您不能总是通过检查
remainingCapacity
来判断是否尝试插入元素,因为可能是另一个线程即将插入或删除元素的情况。- Specified by:
-
remainingCapacity
在接口BlockingQueue<E>
- 结果
- 剩余容量
-
put
public void put(E e) throws InterruptedException
在该队列的尾部插入指定的元素,如果需要,等待空格变为可用。- Specified by:
-
put
在接口BlockingQueue<E>
- 参数
-
e
- 要添加的元素 - 异常
-
InterruptedException
- 如果在等待时中断 -
NullPointerException
- 如果指定的元素为空
-
offer
public boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException
在该队列的尾部插入指定的元素,必要时等待指定的等待时间才能使空间变得可用。- Specified by:
-
offer
在接口BlockingQueue<E>
- 参数
-
e
- 要添加的元素 -
timeout
- 放弃等待多久,以unit
为单位 -
unit
- aTimeUnit
确定如何解释timeout
参数 - 结果
-
true
如果成功,或false
如果在空间可用之前经过指定的等待时间 - 异常
-
InterruptedException
- 如果在等待时中断 -
NullPointerException
- 如果指定的元素为空
-
offer
public boolean offer(E e)
插入指定的元素在这个队列的尾部,如果有可能立即这样做不超过该队列的容量,返回true
在成功和false
如果此队列已满。 当使用容量限制队列时,这种方法通常比方法add
更为方便 ,只能通过抛出异常来插入元素。- Specified by:
-
offer
在接口BlockingQueue<E>
- Specified by:
-
offer
在接口Queue<E>
- 参数
-
e
- 要添加的元素 - 结果
-
true
如果元素被添加到该队列,否则为false
- 异常
-
NullPointerException
- 如果指定的元素为空
-
take
public E take() throws InterruptedException
描述从接口BlockingQueue
复制检索并删除此队列的头,如有必要,等待元素可用。- Specified by:
-
take
在接口BlockingQueue<E>
- 结果
- 这个队列的头
- 异常
-
InterruptedException
- 如果在等待时中断
-
poll
public E poll(long timeout, TimeUnit unit) throws InterruptedException
说明从界面复制:BlockingQueue
检索并删除此队列的头,等待指定的等待时间(如有必要)使元素变为可用。- Specified by:
-
poll
在接口BlockingQueue<E>
- 参数
-
timeout
- 放弃之前等待多久,以unit
为单位 -
unit
- aTimeUnit
确定如何解释timeout
参数 - 结果
-
如果在元素可用之前经过指定的等待时间,则该队列的头部,或
null
- 异常
-
InterruptedException
- 如果中断等待
-
remove
public boolean remove(Object o)
从该队列中删除指定元素的单个实例(如果存在)。 更正式地,删除元素e
使得o.equals(e)
,如果该队列包含一个或多个这样的元素。 如果此队列包含指定的元素(或等效地,如果此队列作为调用的结果而更改),则返回true
。- Specified by:
-
remove
在接口BlockingQueue<E>
- Specified by:
-
remove
在接口Collection<E>
- 重写:
-
remove
在AbstractCollection<E>
- 参数
-
o
- 要从此队列中删除的元素(如果存在) - 结果
-
true
如果此队列由于调用而更改
-
contains
public boolean contains(Object o)
如果此队列包含指定的元素,则返回true
。 更正式地,返回true
当且仅当该队列至少包含一个元素e
,使得o.equals(e)
。- Specified by:
-
contains
在接口BlockingQueue<E>
- Specified by:
-
contains
在接口Collection<E>
- 重写:
-
contains
在AbstractCollection<E>
- 参数
-
o
- 要检查此队列中的遏制的对象 - 结果
-
true
如果此队列包含指定的元素
-
toArray
public Object[] toArray()
以适当的顺序返回一个包含此队列中所有元素的数组。返回的数组将是“安全的”,因为该队列不保留对它的引用。 (换句话说,这个方法必须分配一个新的数组)。 因此,调用者可以自由地修改返回的数组。
此方法充当基于阵列和基于集合的API之间的桥梁。
- Specified by:
-
toArray
在接口Collection<E>
- 重写:
-
toArray
在AbstractCollection<E>
- 结果
- 一个包含此队列中所有元素的数组
-
toArray
public <T> T[] toArray(T[] a)
以适当的顺序返回包含此队列中所有元素的数组; 返回的数组的运行时类型是指定数组的运行时类型。 如果队列适合指定的数组,则返回其中。 否则,将为指定数组的运行时类型和此队列的大小分配一个新数组。如果这个队列适合指定的数组空间(即阵列比此队列更多的元素),则队列结束后的数组中的元素设置为
null
。像
toArray()
方法一样,此方法充当基于数组和基于集合的API之间的桥梁。 此外,该方法允许精确地控制输出阵列的运行时类型,并且在某些情况下可以用于节省分配成本。假设
x
是一个已知只包含字符串的队列。 以下代码可用于将队列转储到新分配的String
数组中:String[] y = x.toArray(new String[0]);
toArray(new Object[0])
功能与toArray()
相同。- Specified by:
-
toArray
在接口Collection<E>
- 重写:
-
toArray
在AbstractCollection<E>
- 参数类型
-
T
- 包含集合的数组的运行时类型 - 参数
-
a
- 要存储队列的元素的阵列,如果它足够大; 否则,为此目的分配相同运行时类型的新数组 - 结果
- 一个包含此队列中所有元素的数组
- 异常
-
ArrayStoreException
- 如果指定数组的运行时类型不是此队列中每个元素的运行时类型的超类型 -
NullPointerException
- 如果指定的数组为空
-
toString
public String toString()
描述从类别复制:AbstractCollection
返回此集合的字符串表示形式。 字符串表示由集合的元素的列表按照它们的迭代器返回的顺序包含在方括号("[]"
)中。 相邻元素由字符", "
(逗号和空格)分隔。 元素将转换为字符串,如String.valueOf(Object)
。- 重写:
-
toString
在AbstractCollection<E>
- 结果
- 此集合的字符串表示形式
-
clear
public void clear()
从这个队列中原子地删除所有的元素。 此呼叫返回后队列将为空。- Specified by:
-
clear
在接口Collection<E>
- 重写:
-
clear
在AbstractQueue<E>
-
drainTo
public int drainTo(Collection<? super E> c)
描述从接口BlockingQueue
复制从该队列中删除所有可用的元素,并将它们添加到给定的集合中。 此操作可能比重复轮询此队列更有效。 尝试向集合c
添加元素时遇到的故障可能会导致在抛出关联的异常时,元素既不在两个集合中,也可能不是两个集合。 尝试将队列排入自身导致IllegalArgumentException
。 此外,如果在操作进行中修改了指定的集合,则此操作的行为是未定义的。- Specified by:
-
drainTo
在接口BlockingQueue<E>
- 参数
-
c
- 将元素传输到的集合 - 结果
- 转移的元素数量
- 异常
-
UnsupportedOperationException
- 如果指定的集合不支持添加元素 -
ClassCastException
- 如果此队列的元素的类阻止将其添加到指定的集合 -
NullPointerException
- 如果指定的集合为空 -
IllegalArgumentException
- 如果指定的集合是此队列,或此队列的某个元素的某些属性阻止将其添加到指定的集合
-
drainTo
public int drainTo(Collection<? super E> c, int maxElements)
说明从接口BlockingQueue
复制最多从该队列中删除给定数量的可用元素,并将它们添加到给定的集合中。 尝试向集合c
添加元素时遇到的失败可能会导致在抛出关联的异常时,元素既不在两个集合中,也可能不是两个集合。 尝试将排队排队自身会导致IllegalArgumentException
。 此外,如果在操作进行中修改了指定的集合,则此操作的行为是未定义的。- Specified by:
-
drainTo
在接口BlockingQueue<E>
- 参数
-
c
- 传输元素的集合 -
maxElements
- 要传输的元素的最大数量 - 结果
- 转移的元素数量
- 异常
-
UnsupportedOperationException
- 如果指定的集合不支持添加元素 -
ClassCastException
- 如果此队列的元素的类阻止将其添加到指定的集合 -
NullPointerException
- 如果指定的集合为空 -
IllegalArgumentException
- 如果指定的集合是此队列,或该队列的某个元素的某些属性阻止将其添加到指定的集合
-
iterator
public Iterator<E> iterator()
- Specified by:
-
iterator
在接口Collection<E>
- Specified by:
-
iterator
在接口Iterable<E>
- Specified by:
-
iterator
在AbstractCollection<E>
- 结果
- 在该队列中的元素以适当的顺序迭代
-
spliterator
public Spliterator<E> spliterator()
在此队列中的元素上返回Spliterator
。返回的拼接器是weakly consistent 。
该
Spliterator
报告Spliterator.CONCURRENT
,Spliterator.ORDERED
,并Spliterator.NONNULL
。- Specified by:
-
spliterator
在接口Collection<E>
- Specified by:
-
spliterator
在接口Iterable<E>
- Implementation Note:
-
Spliterator
实现trySplit
以允许有限的并行性。 - 结果
-
一个
Spliterator
在这个队列中的元素 - 从以下版本开始:
- 1.8
-
forEach
public void forEach(Consumer<? super E> action)
说明从界面复制:Iterable
对Iterable
每个元素执行给定的操作,直到所有元素都被处理或者动作引发异常。 如果指定了该顺序,则按迭代的顺序执行操作。 动作抛出的异常被转发给呼叫者。如果操作执行修改元素的基础源的副作用,则该方法的行为是未指定的,除非重写类已指定并发修改策略。
- Specified by:
-
forEach
在接口Iterable<E>
- 参数
-
action
- 要为每个元素执行的操作 - 异常
-
NullPointerException
- 如果指定的操作为空
-
removeIf
public boolean removeIf(Predicate<? super E> filter)
说明从接口Collection
复制删除满足给定谓词的此集合的所有元素。 在迭代或谓词中抛出的错误或运行时异常被转发给调用者。- Specified by:
-
removeIf
在接口Collection<E>
- 参数
-
filter
- 要删除的元素返回true
的谓词 - 结果
-
true
如果有任何元素被删除 - 异常
-
NullPointerException
- 如果指定的过滤器为空
-
removeAll
public boolean removeAll(Collection<?> c)
描述从类别复制:AbstractCollection
删除指定集合中包含的所有此集合的元素(可选操作)。 此调用返回后,此集合将不包含与指定集合相同的元素。- Specified by:
-
removeAll
在接口Collection<E>
- 重写:
-
removeAll
在AbstractCollection<E>
- 参数
-
c
- 包含要从此集合中删除的元素的集合 - 结果
-
true
如果该收集因呼叫而更改 - 异常
-
NullPointerException
- 如果此集合包含一个或多个空元素,并且指定的集合不支持空元素( optional ),或者如果指定的集合为空 - 另请参见:
-
AbstractCollection.remove(Object)
,AbstractCollection.contains(Object)
-
retainAll
public boolean retainAll(Collection<?> c)
描述从类复制:AbstractCollection
仅保留此集合中包含在指定集合中的元素(可选操作)。 换句话说,从该集合中删除所有不包含在指定集合中的元素。- Specified by:
-
retainAll
在接口Collection<E>
- 重写:
-
retainAll
在AbstractCollection<E>
- 参数
-
c
- 包含要保留在此集合中的元素的集合 - 结果
-
true
如果该收集因呼叫而更改 - 异常
-
NullPointerException
- 如果此集合包含一个或多个空元素,并且指定的集合不允许空元素( optional ),或者如果指定的集合为空 - 另请参见:
-
AbstractCollection.remove(Object)
,AbstractCollection.contains(Object)
-
-