public class DelayQueue
extends AbstractQueue<E extends Delayed>
implements BlockingQueue<E extends Delayed>
java.lang.Object | |||
↳ | java.util.AbstractCollection<E extends java.util.concurrent.Delayed> | ||
↳ | java.util.AbstractQueue<E extends java.util.concurrent.Delayed> | ||
↳ | java.util.concurrent.DelayQueue<E extends java.util.concurrent.Delayed> |
无界blocking queue的Delayed
元件,其中,当其延迟已到期的元素只能采取。 队列的头部是过去最远延迟过期的元素Delayed
。 如果没有延迟已经过期,则没有头,并且poll
将返回null
。 当元素的getDelay(TimeUnit.NANOSECONDS)
方法返回小于或等于零的值时,就会发生过期。 即使未过期的元素不能使用take
或poll
删除,但它们在其他方面被视为正常元素。 例如, size
方法返回已过期和未过期元素的计数。 该队列不允许空元素。
此类及其迭代器实现Collection
和Iterator
接口的所有可选方法。 方法iterator()
提供的迭代器不保证以任何特定顺序遍历DelayQueue的元素。
Public constructors |
|
---|---|
DelayQueue() 创建最初为空的新的 |
|
DelayQueue(Collection<? extends E> c) |
Public methods |
|
---|---|
boolean |
add(E e) 将指定的元素插入到此延迟队列中。 |
void |
clear() 原子上从这个延迟队列中删除所有元素。 |
int |
drainTo(Collection<? super E> c, int maxElements) 最多从此队列中移除给定数量的可用元素,并将它们添加到给定集合中。 |
int |
drainTo(Collection<? super E> c) 从该队列中移除所有可用的元素,并将它们添加到给定的集合中。 |
Iterator<E> |
iterator() 返回此队列中所有元素(包括过期和未过期)的迭代器。 |
boolean |
offer(E e) 将指定的元素插入到此延迟队列中。 |
boolean |
offer(E e, long timeout, TimeUnit unit) 将指定的元素插入到此延迟队列中。 |
E |
peek() 检索但不移除此队列的头部,或者如果此队列为空,则返回 |
E |
poll(long timeout, TimeUnit unit) 检索并删除此队列的头部,如果需要等待,直到此队列上有延迟过期的元素,或者指定的等待时间过期。 |
E |
poll() 如果此队列没有延迟过期的元素,则检索并移除此队列的头部,或返回 |
void |
put(E e) 将指定的元素插入到此延迟队列中。 |
int |
remainingCapacity() 始终返回 |
boolean |
remove(Object o) 从该队列中移除指定元素的单个实例(如果存在),是否已过期。 |
int |
size() 返回此集合中的元素数量。 |
E |
take() 检索并删除此队列的头部,如果有必要,请等待,直到此队列中有延迟过期的元素可用。 |
<T> T[] |
toArray(T[] a) 返回包含此队列中所有元素的数组; 返回数组的运行时类型是指定数组的运行时类型。 |
Object[] |
toArray() 返回包含此队列中所有元素的数组。 |
Inherited methods |
|
---|---|
From class java.util.AbstractQueue
|
|
From class java.util.AbstractCollection
|
|
From class java.lang.Object
|
|
From interface java.util.Queue
|
|
From interface java.util.Collection
|
|
From interface java.util.concurrent.BlockingQueue
|
|
From interface java.lang.Iterable
|
DelayQueue (Collection<? extends E> c)
创建一个 DelayQueue
最初包含给定的 Delayed
实例集合的 Delayed
。
Parameters | |
---|---|
c |
Collection : the collection of elements to initially contain |
Throws | |
---|---|
NullPointerException |
if the specified collection or any of its elements are null |
boolean add (E e)
将指定的元素插入到此延迟队列中。
Parameters | |
---|---|
e |
E : the element to add |
Returns | |
---|---|
boolean |
true (as specified by add(E) ) |
Throws | |
---|---|
NullPointerException |
if the specified element is null |
void clear ()
原子上从这个延迟队列中删除所有元素。 此通话返回后,队列将为空。 未等待延迟的元素不会等待; 他们只是从队列中被丢弃。
int drainTo (Collection<? super E> c, int maxElements)
最多从此队列中移除给定数量的可用元素,并将它们添加到给定集合中。 尝试将元素添加到集合c
遇到的故障可能导致元素不在任何集合中,或者在引发关联异常时集合中的任何一个集合或两个集合都不在元素中。 尝试将队列IllegalArgumentException
自身导致IllegalArgumentException
。 此外,如果在操作正在进行时修改了指定的集合,则此操作的行为未定义。
Parameters | |
---|---|
c |
Collection : the collection to transfer elements into |
maxElements |
int : the maximum number of elements to transfer |
Returns | |
---|---|
int |
the number of elements transferred |
Throws | |
---|---|
UnsupportedOperationException |
|
ClassCastException |
|
NullPointerException |
|
IllegalArgumentException |
int drainTo (Collection<? super E> c)
从该队列中移除所有可用的元素,并将它们添加到给定的集合中。 该操作可能比重复轮询该队列更有效。 尝试将元素添加到集合c
遇到的故障可能导致元素不在任何一个或两个集合中,当引发关联的异常时。 尝试排除队列本身导致IllegalArgumentException
。 此外,如果在操作正在进行时修改了指定的集合,则此操作的行为未定义。
Parameters | |
---|---|
c |
Collection : the collection to transfer elements into |
Returns | |
---|---|
int |
the number of elements transferred |
Throws | |
---|---|
UnsupportedOperationException |
|
ClassCastException |
|
NullPointerException |
|
IllegalArgumentException |
Iterator<E> iterator ()
返回此队列中所有元素(包括过期和未过期)的迭代器。 迭代器不会以任何特定顺序返回元素。
返回的迭代器是 weakly consistent 。
Returns | |
---|---|
Iterator<E> |
an iterator over the elements in this queue |
boolean offer (E e)
将指定的元素插入到此延迟队列中。
Parameters | |
---|---|
e |
E : the element to add |
Returns | |
---|---|
boolean |
true |
Throws | |
---|---|
NullPointerException |
if the specified element is null |
boolean offer (E e, long timeout, TimeUnit unit)
将指定的元素插入到此延迟队列中。 由于队列是无界的,这个方法永远不会阻塞。
Parameters | |
---|---|
e |
E : the element to add |
timeout |
long : This parameter is ignored as the method never blocks |
unit |
TimeUnit : This parameter is ignored as the method never blocks |
Returns | |
---|---|
boolean |
true |
Throws | |
---|---|
NullPointerException |
E peek ()
检索但不移除此队列的头部,或者如果此队列为空,则返回null
。 与poll
不同,如果队列中没有可用的过期元素,则此方法返回下一个将过期的元素(如果存在)。
Returns | |
---|---|
E |
the head of this queue, or null if this queue is empty |
E poll (long timeout, TimeUnit unit)
检索并删除此队列的头部,如果需要等待,直到此队列上有延迟过期的元素,或者指定的等待时间过期。
Parameters | |
---|---|
timeout |
long : how long to wait before giving up, in units of unit |
unit |
TimeUnit : a TimeUnit determining how to interpret the timeout parameter |
Returns | |
---|---|
E |
the head of this queue, or null if the specified waiting time elapses before an element with an expired delay becomes available |
Throws | |
---|---|
InterruptedException |
E poll ()
如果此队列没有延迟过期的元素,则检索并移除此队列的头部,或返回 null
。
Returns | |
---|---|
E |
the head of this queue, or null if this queue has no elements with an expired delay |
void put (E e)
将指定的元素插入到此延迟队列中。 由于队列是无界的,这个方法永远不会阻塞。
Parameters | |
---|---|
e |
E : the element to add |
Throws | |
---|---|
NullPointerException |
int remainingCapacity ()
始终返回 Integer.MAX_VALUE
因为 DelayQueue
不受容量限制。
Returns | |
---|---|
int |
Integer.MAX_VALUE |
boolean remove (Object o)
从该队列中移除指定元素的单个实例(如果存在),是否已过期。
Parameters | |
---|---|
o |
Object : element to be removed from this collection, if present |
Returns | |
---|---|
boolean |
true if an element was removed as a result of this call |
int size ()
返回此集合中的元素数量。 如果此集合包含多个Integer.MAX_VALUE元素,则返回Integer.MAX_VALUE 。
Returns | |
---|---|
int |
the number of elements in this collection |
E take ()
检索并删除此队列的头部,如果有必要,请等待,直到此队列中有延迟过期的元素可用。
Returns | |
---|---|
E |
the head of this queue |
Throws | |
---|---|
InterruptedException |
T[] toArray (T[] a)
返回包含此队列中所有元素的数组; 返回数组的运行时类型是指定数组的运行时类型。 返回的数组元素没有特定的顺序。 如果队列适合指定的数组,则返回其中。 否则,将使用指定数组的运行时类型和此队列的大小分配一个新数组。
如果此队列符合指定数组并有空余空间(即,数组的元素多于此队列),则紧随队列尾部的阵列中的元素将设置为 null
。
与toArray()
方法一样,此方法充当基于数组和基于集合的API之间的桥梁。 此外,该方法允许精确控制输出数组的运行时类型,并且在某些情况下可以用于节省分配成本。
以下代码可用于将延迟队列转储到新分配的 Delayed
数组中:
Delayed[] a = q.toArray(new Delayed[0]);
Note that
toArray(new Object[0])
is identical in function to
toArray()
.
Parameters | |
---|---|
a |
T : the array into which the elements of the queue are to be stored, if it is big enough; otherwise, a new array of the same runtime type is allocated for this purpose |
Returns | |
---|---|
T[] |
an array containing all of the elements in this queue |
Throws | |
---|---|
ArrayStoreException |
if the runtime type of the specified array is not a supertype of the runtime type of every element in this queue |
NullPointerException |
if the specified array is null |
Object[] toArray ()
返回包含此队列中所有元素的数组。 返回的数组元素没有特定的顺序。
返回的数组将是“安全”的,因为此队列不维护对它的引用。 (换句话说,这个方法必须分配一个新的数组)。 调用者可以自由修改返回的数组。
此方法充当基于数组和基于集合的API之间的桥梁。
Returns | |
---|---|
Object[] |
an array containing all of the elements in this queue |