java.lang.Object
java.util.AbstractCollection <E>
java.util.AbstractQueue <E>
java.util.concurrent.DelayQueue<E>
- 类型参数:
E- 此队列中保存的元素类型
- 所有已实现的接口:
Iterable<E>,Collection<E>,BlockingQueue<E>,Queue<E>
一个无限的 阻塞队列 个
Delayed 个元素,其中一个元素只有在其延迟到期时才能被获取。队列的 head 是过去延迟过期最远的 Delayed 元素。如果没有延迟到期,则没有头,poll 将返回 null。当元素的 getDelay(TimeUnit.NANOSECONDS) 方法返回小于或等于零的值时,就会过期。即使无法使用 take 或 poll 删除未过期的元素,它们也会被视为普通元素。例如,size 方法返回过期和未过期元素的计数。此队列不允许空元素。
此类及其迭代器实现了 Collection 和 Iterator 接口的所有 optional 方法。方法 iterator() 中提供的迭代器是 not 保证以任何特定顺序遍历 DelayQueue 的元素。
此类是 Java 集合框架 的成员。
- 自从:
- 1.5
-
构造方法总结
构造方法构造方法描述创建一个最初为空的新DelayQueue。DelayQueue(Collection<? extends E> c) 创建一个DelayQueue最初包含给定Delayed实例集合的元素。 -
方法总结
修饰符和类型方法描述boolean将指定元素插入此延迟队列。voidclear()以原子方式从此延迟队列中删除所有元素。intdrainTo(Collection<? super E> c) 从此队列中删除所有可用元素并将它们添加到给定集合中。intdrainTo(Collection<? super E> c, int maxElements) 从此队列中最多移除给定数量的可用元素,并将它们添加到给定的集合中。iterator()返回此队列中所有元素(过期和未过期)的迭代器。boolean将指定元素插入此延迟队列。boolean将指定元素插入此延迟队列。peek()检索但不删除此队列的头部,如果此队列为空,则返回null。poll()检索并删除此队列的头部,或者如果此队列没有元素具有过期延迟,则返回null。检索并移除此队列的头部,如有必要,等待直到此队列上有一个具有过期延迟的元素可用,或者指定的等待时间到期。void将指定元素插入此延迟队列。int始终返回Integer.MAX_VALUE,因为DelayQueue不受容量限制。boolean从此队列中删除指定元素的单个实例(如果存在),无论它是否已过期。intsize()返回此集合中的元素数。take()检索并删除此队列的头部,如有必要,等待直到此队列上有一个具有过期延迟的元素可用。Object[]toArray()返回包含此队列中所有元素的数组。<T> T[]toArray(T[] a) 返回一个包含此队列中所有元素的数组;返回数组的运行时类型是指定数组的类型。在类 java.util.AbstractQueue 中声明的方法
addAll, element, remove在类 java.util.AbstractCollection 中声明的方法
contains, containsAll, isEmpty, removeAll, retainAll, toString在类 java.lang.Object 中声明的方法
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait在接口 java.util.concurrent.BlockingQueue 中声明的方法
contains在接口 java.util.Collection 中声明的方法
addAll, containsAll, equals, hashCode, isEmpty, parallelStream, removeAll, removeIf, retainAll, spliterator, stream, toArray
-
构造方法详细信息
-
DelayQueue
public DelayQueue()创建一个最初为空的新DelayQueue。 -
DelayQueue
创建一个DelayQueue最初包含给定Delayed实例集合的元素。- 参数:
c- 最初包含的元素集合- 抛出:
NullPointerException- 如果指定的集合或其任何元素为空
-
-
方法详情
-
add
将指定元素插入此延迟队列。- 指定者:
add在接口BlockingQueue<E extends Delayed>中- 指定者:
add在接口Collection<E extends Delayed>中- 指定者:
add在接口Queue<E extends Delayed>中- 重写:
add在类AbstractQueue<E extends Delayed>中- 参数:
e- 要添加的元素- 返回:
true(由Collection.add(E)指定)- 抛出:
NullPointerException- 如果指定元素为空
-
offer
将指定元素插入此延迟队列。- 指定者:
offer在接口BlockingQueue<E extends Delayed>中- 指定者:
offer在接口Queue<E extends Delayed>中- 参数:
e- 要添加的元素- 返回:
true- 抛出:
NullPointerException- 如果指定元素为空
-
put
将指定元素插入此延迟队列。由于队列是无限的,这个方法永远不会阻塞。- 指定者:
put在接口BlockingQueue<E extends Delayed>中- 参数:
e- 要添加的元素- 抛出:
NullPointerException- 如果指定元素为空
-
offer
将指定元素插入此延迟队列。由于队列是无限的,这个方法永远不会阻塞。- 指定者:
offer在接口BlockingQueue<E extends Delayed>中- 参数:
e- 要添加的元素timeout- 此参数被忽略,因为该方法从不阻塞unit- 该参数被忽略,因为该方法从不阻塞- 返回:
true- 抛出:
NullPointerException- 如果指定元素为空
-
poll
检索并删除此队列的头部,或者如果此队列没有元素具有过期延迟,则返回null。 -
take
检索并删除此队列的头部,如有必要,等待直到此队列上有一个具有过期延迟的元素可用。- 指定者:
take在接口BlockingQueue<E extends Delayed>中- 返回:
- 这个队列的头
- 抛出:
InterruptedException- 如果在等待时被打断
-
poll
检索并移除此队列的头部,如有必要,等待直到此队列上有一个具有过期延迟的元素可用,或者指定的等待时间到期。- 指定者:
poll在接口BlockingQueue<E extends Delayed>中- 参数:
timeout- 放弃前等待多长时间,以unit为单位unit- 一个TimeUnit决定如何解释timeout参数- 返回:
-
此队列的头部,或者
null如果在具有过期延迟的元素变得可用之前指定的等待时间已经过去 - 抛出:
InterruptedException- 如果在等待时被打断
-
peek
检索但不删除此队列的头部,如果此队列为空,则返回null。与poll不同,如果队列中没有可用的过期元素,则此方法返回下一个将过期的元素(如果存在)。 -
size
public int size()从接口Collection复制的描述返回此集合中的元素数。如果此集合包含超过Integer.MAX_VALUE个元素,则返回Integer.MAX_VALUE。- 指定者:
size在接口Collection<E extends Delayed>中- 返回:
- 此集合中的元素数
-
drainTo
从接口BlockingQueue复制的描述从此队列中删除所有可用元素并将它们添加到给定集合中。此操作可能比重复轮询此队列更有效。尝试将元素添加到集合c时遇到的失败可能会导致在抛出相关异常时元素不在任何一个或两个集合中。尝试将队列排空到自身会导致IllegalArgumentException。此外,如果指定的集合在操作过程中被修改,则此操作的行为是未定义的。- 指定者:
drainTo在接口BlockingQueue<E extends Delayed>中- 参数:
c- 将元素转移到的集合- 返回:
- 转移的元素数量
- 抛出:
UnsupportedOperationException- 如果指定集合不支持添加元素ClassCastException- 如果此队列元素的类阻止将其添加到指定集合NullPointerException- 如果指定的集合为空IllegalArgumentException- 如果指定的集合是这个队列,或者这个队列元素的某些属性阻止它被添加到指定的集合
-
drainTo
从接口BlockingQueue复制的描述从此队列中最多移除给定数量的可用元素,并将它们添加到给定的集合中。尝试将元素添加到集合c时遇到的失败可能会导致在抛出相关异常时元素不在任何一个或两个集合中。尝试将队列排空到自身会导致IllegalArgumentException。此外,如果指定的集合在操作过程中被修改,则此操作的行为是未定义的。- 指定者:
drainTo在接口BlockingQueue<E extends Delayed>中- 参数:
c- 将元素转移到的集合maxElements- 要传输的最大元素数- 返回:
- 转移的元素数量
- 抛出:
UnsupportedOperationException- 如果指定集合不支持添加元素ClassCastException- 如果此队列元素的类阻止将其添加到指定集合NullPointerException- 如果指定的集合为空IllegalArgumentException- 如果指定的集合是这个队列,或者这个队列元素的某些属性阻止它被添加到指定的集合
-
clear
public void clear()以原子方式从此延迟队列中删除所有元素。此调用返回后队列将为空。不等待延迟未过期的元素;他们只是从队列中丢弃。- 指定者:
clear在接口Collection<E extends Delayed>中- 重写:
clear在类AbstractQueue<E extends Delayed>中
-
remainingCapacity
public int remainingCapacity()始终返回Integer.MAX_VALUE,因为DelayQueue不受容量限制。- 指定者:
remainingCapacity在接口BlockingQueue<E extends Delayed>中- 返回:
Integer.MAX_VALUE
-
toArray
返回包含此队列中所有元素的数组。返回的数组元素没有特定的顺序。返回的数组将是“安全的”,因为此队列不维护对它的引用。 (换句话说,这个方法必须分配一个新数组)。调用者因此可以自由修改返回的数组。
此方法充当基于数组和基于集合的 API 之间的桥梁。
- 指定者:
toArray在接口Collection<E extends Delayed>中- 重写:
toArray在类AbstractCollection<E extends Delayed>中- 返回:
- 包含此队列中所有元素的数组
-
toArray
public <T> T[] toArray(T[] a) 返回一个包含此队列中所有元素的数组;返回数组的运行时类型是指定数组的类型。返回的数组元素没有特定的顺序。如果队列适合指定的数组,则在其中返回。否则,将分配一个新数组,其中包含指定数组的运行时类型和此队列的大小。如果此队列适合指定的数组并有剩余空间(即,数组的元素多于此队列),则紧接队列末尾的数组中的元素设置为
null。与
toArray()方法一样,此方法充当基于数组和基于集合的 API 之间的桥梁。此外,此方法允许精确控制输出数组的运行时类型,并且在某些情况下可用于节省分配成本。以下代码可用于将延迟队列转储到新分配的
Delayed数组中:
请注意,Delayed[] a = q.toArray(new Delayed[0]);toArray(new Object[0])在功能上与toArray()相同。- 指定者:
toArray在接口Collection<E extends Delayed>中- 重写:
toArray在类AbstractCollection<E extends Delayed>中- 类型参数:
T- 包含集合的数组的组件类型- 参数:
a- 要存储队列元素的数组,如果它足够大的话;否则,为此分配一个相同运行时类型的新数组- 返回:
- 包含此队列中所有元素的数组
- 抛出:
ArrayStoreException- 如果指定数组的运行时类型不是此队列中每个元素的运行时类型的超类型NullPointerException- 如果指定数组为空
-
remove
从此队列中删除指定元素的单个实例(如果存在),无论它是否已过期。- 指定者:
remove在接口BlockingQueue<E extends Delayed>中- 指定者:
remove在接口Collection<E extends Delayed>中- 重写:
remove在类AbstractCollection<E extends Delayed>中- 参数:
o- 要从此集合中删除的元素(如果存在)- 返回:
true如果一个元素作为这个调用的结果被移除
-
iterator
返回此队列中所有元素(过期和未过期)的迭代器。迭代器不会以任何特定顺序返回元素。返回的迭代器是 弱一致 。
-