E
- 在这个集合中保存的元素的类型
public class DelayQueue<E extends Delayed> extends AbstractQueue<E> implements BlockingQueue<E>
Delayed
元素,其中元素只能在其延迟到期时才被使用。
队列的头是Delayed
元素,其延迟期满后保存时间。
如果没有延迟到期,那么没有头, poll
会返回null
。
当元素的getDelay(TimeUnit.NANOSECONDS)
方法返回小于或等于零的值时,就会发生getDelay(TimeUnit.NANOSECONDS)
。
即使未使用的元素不能使用take
或poll
,它们另外被视为普通元素。
例如, size
方法返回到期和未到期元素的计数。
此队列不允许空元素。
该类及其迭代器实现了Collection
和Iterator
接口的所有可选方法。 方法iterator()
中提供的迭代器不能保证以任何特定顺序遍历DelayQueue的元素。
这个类是Java Collections Framework的成员。
Constructor and Description |
---|
DelayQueue()
创建一个最初为空的新的
DelayQueue 。
|
DelayQueue(Collection<? extends E> c)
创建 DelayQueue 最初包含的给定集合中的元素Delayed 个实例。
|
Modifier and Type | Method and Description |
---|---|
boolean |
add(E e)
将指定的元素插入到此延迟队列中。
|
void |
clear()
从此延迟队列中原子地删除所有元素。
|
int |
drainTo(Collection<? super E> c)
从该队列中删除所有可用的元素,并将它们添加到给定的集合中。
|
int |
drainTo(Collection<? super E> c, int maxElements)
最多从该队列中删除给定数量的可用元素,并将它们添加到给定的集合中。
|
Iterator<E> |
iterator()
返回此队列中所有元素(已过期和未过期)的迭代器。
|
boolean |
offer(E e)
将指定的元素插入到此延迟队列中。
|
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()
总是返回
Integer.MAX_VALUE ,因为
DelayQueue 没有容量限制。
|
boolean |
remove(Object o)
从该队列中删除指定元素的单个实例(如果存在),无论其是否已过期。
|
int |
size()
返回此集合中的元素数。
|
E |
take()
检索并删除此队列的头部,如果需要,等待有一个延迟到期的元素在此队列上可用。
|
Object[] |
toArray()
返回一个包含此队列中所有元素的数组。
|
<T> T[] |
toArray(T[] a)
返回一个包含此队列中所有元素的数组;
返回的数组的运行时类型是指定数组的运行时类型。
|
addAll, element, remove
contains, containsAll, isEmpty, removeAll, retainAll, toString
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
contains
addAll, containsAll, equals, hashCode, isEmpty, parallelStream, removeAll, removeIf, retainAll, spliterator, stream
public DelayQueue()
DelayQueue
最初为空的。
public DelayQueue(Collection<? extends E> c)
DelayQueue
最初包含的给定集合中的元素Delayed
个实例。
c
- 最初包含的元素的集合
NullPointerException
- 如果指定的集合或其任何元素为空
public boolean add(E e)
add
在接口
Collection<E extends Delayed>
add
在接口
BlockingQueue<E extends Delayed>
add
在界面
Queue<E extends Delayed>
add
在
AbstractQueue<E extends Delayed>
e
- 要添加的元素
true
(由
Collection.add(E)
指定 )
NullPointerException
- 如果指定的元素为空
public boolean offer(E e)
offer
在接口
BlockingQueue<E extends Delayed>
offer
在接口
Queue<E extends Delayed>
e
- 要添加的元素
true
NullPointerException
- 如果指定的元素为空
public void put(E e)
put
中的
BlockingQueue<E extends Delayed>
e
- 要添加的元素
NullPointerException
- 如果指定的元素为空
public boolean offer(E e, long timeout, TimeUnit unit)
offer
在接口
BlockingQueue<E extends Delayed>
e
- 要添加的元素
timeout
- 该参数被忽略,因为该方法从不阻止
unit
- 该参数被忽略,因为该方法从不阻止
true
NullPointerException
- 如果指定的元素为空
public E poll()
null
。
public E take() throws InterruptedException
take
在接口
BlockingQueue<E extends Delayed>
InterruptedException
- 如果在等待时中断
public E poll(long timeout, TimeUnit unit) throws InterruptedException
poll
在界面
BlockingQueue<E extends Delayed>
timeout
- 放弃之前等待多久,以
unit
为单位
unit
- a
TimeUnit
确定如何解释
timeout
参数
null
如果到期延迟了指定的等待时间的元素之前流逝变得可用
InterruptedException
- 如果中断等待
public E peek()
null
。
与poll
不同,如果队列中没有过期的元素可用,则此方法返回将在以后过期的元素(如果存在)。
public int size()
Collection
复制
size
在接口
Collection<E extends Delayed>
size
在
AbstractCollection<E extends Delayed>
public int drainTo(Collection<? super E> c)
BlockingQueue
c
添加元素时遇到的c
可能会导致元素在抛出关联的异常时既不在两个集合中,也可能不是两个集合。
尝试将队列排入自身导致IllegalArgumentException
。
此外,如果在操作进行中修改了指定的集合,则此操作的行为是未定义的。
drainTo
在界面
BlockingQueue<E extends Delayed>
c
- 将元素传输到的集合
UnsupportedOperationException
- 如果指定集合不支持元素的添加
ClassCastException
- 如果此队列的元素的类阻止将其添加到指定的集合
NullPointerException
- 如果指定的集合为空
IllegalArgumentException
- 如果指定的集合是此队列,或该队列的某个元素的某些属性阻止将其添加到指定的集合
public int drainTo(Collection<? super E> c, int maxElements)
BlockingQueue
复制
c
添加元素时遇到的c
可能导致元素在抛出关联的异常时都不在两个集合中。
尝试将队列排入自身导致IllegalArgumentException
。
此外,如果在操作进行中修改了指定的集合,则此操作的行为是未定义的。
drainTo
在接口
BlockingQueue<E extends Delayed>
c
- 传输元素的集合
maxElements
- 要传输的元素的最大数量
UnsupportedOperationException
- 如果指定集合不支持元素的添加
ClassCastException
- 如果此队列的元素的类阻止将其添加到指定的集合
NullPointerException
- 如果指定的集合为空
IllegalArgumentException
- 如果指定的集合是此队列,或该队列的某个元素的某些属性阻止将其添加到指定的集合
public void clear()
clear
在接口
Collection<E extends Delayed>
clear
在
AbstractQueue<E extends Delayed>
public int remainingCapacity()
Integer.MAX_VALUE
,因为
DelayQueue
没有容量限制。
remainingCapacity
在接口
BlockingQueue<E extends Delayed>
Integer.MAX_VALUE
public Object[] toArray()
返回的数组将是“安全的”,因为该队列不保留对它的引用。 (换句话说,这个方法必须分配一个新的数组)。 因此,调用者可以自由地修改返回的数组。
此方法充当基于阵列和基于集合的API之间的桥梁。
toArray
在接口
Collection<E extends Delayed>
toArray
在
AbstractCollection<E extends Delayed>
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
- 如果指定的数组为空
public boolean remove(Object o)
remove
在接口
Collection<E extends Delayed>
remove
在接口
BlockingQueue<E extends Delayed>
remove
在类
AbstractCollection<E extends Delayed>
o
- 要从此集合中删除的元素(如果存在)