IBlockingQueue 接口

定义

此外 Queue ,它支持在检索元素时等待队列变为非空的操作,并在存储元素时等待队列中可用空间。

[Android.Runtime.Register("java/util/concurrent/BlockingQueue", "", "Java.Util.Concurrent.IBlockingQueueInvoker")]
[Java.Interop.JavaTypeParameters(new System.String[] { "E" })]
public interface IBlockingQueue : IDisposable, Java.Interop.IJavaPeerable, Java.Util.IQueue
[<Android.Runtime.Register("java/util/concurrent/BlockingQueue", "", "Java.Util.Concurrent.IBlockingQueueInvoker")>]
[<Java.Interop.JavaTypeParameters(new System.String[] { "E" })>]
type IBlockingQueue = interface
    interface IQueue
    interface ICollection
    interface IIterable
    interface IJavaObject
    interface IDisposable
    interface IJavaPeerable
派生
属性
实现

注解

此外 Queue ,它支持在检索元素时等待队列变为非空的操作,并在存储元素时等待队列中可用空间。

BlockingQueue 方法采用四种形式,处理操作的方法不同,这些操作不能立即得到满足,但在将来的某个时间点可能会得到满足:一个引发异常,第二个将返回一个特殊值( null 或者 false,根据操作),第三个块无限期地阻止当前线程,直到操作可以成功,并且第四个块在放弃之前只得到给定的最大时间限制。 下表汇总了这些方法:

<table class=“plain”>caption Summary of BlockingQueue methods</caption><tr><td/td>><< th scope=“col” style=“font-weight:normal; font-style:italic”>Throws exception</th><scope=“col” style=“font-weight:normal; font-style:italic”>Special value</th<>scope=“col” style=“font-weight:normal; font-style:italic”>Blocks</th<>scope=“col” style=“font-weight:normal;><font-style:italic“>Times out</th></tr><tr><th scope=”row“ style=”text-align:left“>Insert</th><td><#add(Object) add(e)/td><td><#offer(Object) offer(e) td/td><><#put(Object) put(e) td td/td td/<><<>#offer(Object, long, TimeUnit) offer(e, time, unit)>tr<>tr<>th scope=”row“ style=”text-align:left“>Remove</th<>td/td>#remove() remove()< td/td><>#poll() poll()<><td><#take() take()/td td></td>><<#poll(long, TimeUnit) poll(time, unit)/tr><th><scope=“row” style=“text-align:left”>Examine</th><td#element() element()<>/td>><<<>#peek() peek() style=“font-style: italic”not applicable/td><td style=“font-style: italic”>>not applicable<</td<>/tr></table>

A BlockingQueue 不接受 null 元素。 NullPointerException实现在尝试offeraddput或 a .null A null 用作 sentinel 值来指示操作失败 poll

A BlockingQueue 可能受容量限制。 在任何给定时间,它都有一个 remainingCapacity 超出此范围,没有其他元素可以 put 不受阻止。 没有任何固有容量约束的始终 BlockingQueue 报告剩余容量 Integer.MAX_VALUE

BlockingQueue 实现主要用于生成方-使用者队列,但另外还支持 Collection 接口。 因此,例如,可以使用 从队列 remove(x)中删除任意元素。 但是,此类操作通常<>不是</em> 非常高效地执行,并且仅用于偶尔使用,例如取消排队消息时。

BlockingQueue 实现是线程安全的。 所有队列方法都使用内部锁或其他形式的并发控制以原子方式实现其效果。 但是,em bulk/em>> Collection 操作containsAlladdAllremoveAll<em>不<一定以原子方式执行,retainAll除非在实现中另有指定。<>< 因此, addAll(c) 在只添加一些元素 c后,可能会失败(引发异常)。

A BlockingQueue 不<></em> 本质上支持任何类型的 ”close”或 ”shutdown”操作,指示不会再添加任何项。 此类功能的需求和用法往往依赖于实现。 例如,一种常见的策略是生成者插入特殊的 <em>stream</em> 或 <em>poison</em> 对象,这些对象在使用者采用时会相应地进行解释。

使用示例,基于典型的生成者-使用者方案。 请注意, BlockingQueue 可以安全地与多个生成者和多个使用者一起使用。

{@code
            class Producer implements Runnable {
              private final BlockingQueue queue;
              Producer(BlockingQueue q) { queue = q; }
              public void run() {
                try {
                  while (true) { queue.put(produce()); }
                } catch (InterruptedException ex) { ... handle ...}
              }
              Object produce() { ... }
            }

            class Consumer implements Runnable {
              private final BlockingQueue queue;
              Consumer(BlockingQueue q) { queue = q; }
              public void run() {
                try {
                  while (true) { consume(queue.take()); }
                } catch (InterruptedException ex) { ... handle ...}
              }
              void consume(Object x) { ... }
            }

            class Setup {
              void main() {
                BlockingQueue q = new SomeQueueImplementation();
                Producer p = new Producer(q);
                Consumer c1 = new Consumer(q);
                Consumer c2 = new Consumer(q);
                new Thread(p).start();
                new Thread(c1).start();
                new Thread(c2).start();
              }
            }}

内存一致性影响:与其他并发集合一样,在将对象放入 BlockingQueue<i>发生之前</i> 操作之前线程中的操作,然后从 BlockingQueue 另一个线程中访问或删除该元素。

此接口是 Java 集合框架的成员

在 1.5 中添加。

适用于 . 的 java.util.concurrent.BlockingQueueJava 文档

本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。

属性

Handle

获取基础 Android 对象的 JNI 值。

(继承自 IJavaObject)
IsEmpty

如果不包含 Collection 任何元素,则返回。

(继承自 ICollection)
JniIdentityHashCode

返回包装实例的值 java.lang.System.identityHashCode()

(继承自 IJavaPeerable)
JniManagedPeerState

托管对等方的状态。

(继承自 IJavaPeerable)
JniPeerMembers

成员访问和调用支持。

(继承自 IJavaPeerable)
PeerReference

返回 JniObjectReference 包装的 Java 对象实例。

(继承自 IJavaPeerable)

方法

Add(Object)

如果可以立即执行此操作而不违反容量限制,则向此队列插入指定的元素,并在成功后返回 true ,如果当前没有可用空间,则会 IllegalStateException 引发该元素。

AddAll(ICollection)

将指定集合中的所有元素添加到此集合(可选操作)。

(继承自 ICollection)
Clear()

从此集合中删除所有元素(可选操作)。

(继承自 ICollection)
Contains(Object)

返回 true 此队列是否包含指定的元素。

ContainsAll(ICollection)

如果 true 此集合包含指定集合中的所有元素,则返回。

(继承自 ICollection)
Disposed()

在释放实例时调用。

(继承自 IJavaPeerable)
DisposeUnlessReferenced()

如果没有对此实例的未完成引用,则调用 Dispose();否则不执行任何操作。

(继承自 IJavaPeerable)
DrainTo(ICollection)

从此队列中删除所有可用元素,并将其添加到给定集合。

DrainTo(ICollection, Int32)

从此队列中移除最多给定数量的可用元素,并将其添加到给定集合。

Element()

检索此队列的头,但不删除。

(继承自 IQueue)
Equals(Object)

将指定的对象与此集合进行比较,以便相等。

(继承自 ICollection)
Finalized()

在实例完成时调用。

(继承自 IJavaPeerable)
ForEach(IConsumer)

对每个元素执行给定操作,直到处理完所有元素 Iterable 或该操作引发异常。

(继承自 IIterable)
GetHashCode()

返回此集合的哈希代码值。

(继承自 ICollection)
Iterator()

返回此集合中元素的迭代器。

(继承自 ICollection)
Offer(Object)

如果可以立即执行此操作而不违反容量限制、 true 成功返回且 false 当前没有可用空间,请将指定的元素插入到此队列中。

Offer(Object, Int64, TimeUnit)

将指定的元素插入到此队列中,如果需要空间可用,则等待指定的等待时间。

Peek()

检索但不删除此队列的头,或返回 null 此队列是否为空。

(继承自 IQueue)
Poll()

检索和删除此队列的头,或返回 null 此队列是否为空。

(继承自 IQueue)
Poll(Int64, TimeUnit)

检索并删除此队列的头,如有必要,等待指定的等待时间,使元素变得可用。

Put(Object)

将指定的元素插入到此队列中,如有必要,等待空间变为可用。

RemainingCapacity()

返回此队列理想情况下(在没有内存或资源约束的情况下)接受且没有阻塞或 Integer.MAX_VALUE 没有固有限制的其他元素数。

Remove()

检索并删除此队列的头。

(继承自 IQueue)
Remove(Object)

从此队列中删除指定元素的单个实例(如果存在)。

RemoveAll(ICollection)

删除指定集合中包含的所有此集合元素(可选操作)。

(继承自 ICollection)
RemoveIf(IPredicate)

删除满足给定谓词的此集合的所有元素。

(继承自 ICollection)
RetainAll(ICollection)

仅保留指定集合中包含的此集合中的元素(可选操作)。

(继承自 ICollection)
SetJniIdentityHashCode(Int32)

设置由 JniIdentityHashCode. 返回的值。

(继承自 IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

此外 Queue ,它支持在检索元素时等待队列变为非空的操作,并在存储元素时等待队列中可用空间。

(继承自 IJavaPeerable)
SetPeerReference(JniObjectReference)

设置由 PeerReference. 返回的值。

(继承自 IJavaPeerable)
Size()

返回此集合中的元素数。

(继承自 ICollection)
Spliterator()

Spliterator创建由此Iterable描述的元素。

(继承自 IIterable)
Take()

检索并删除此队列的头,如有必要,请等待元素可用。

ToArray()

返回一个数组,其中包含此集合中的所有元素。

(继承自 ICollection)
ToArray(IIntFunction)

返回包含此集合中的所有元素的数组,该数组使用提供的 generator 函数分配返回的数组。

(继承自 ICollection)
ToArray(Object[])

返回一个数组,其中包含此集合中的所有元素;返回的数组的运行时类型是指定数组的运行时类型。

(继承自 ICollection)
UnregisterFromRuntime()

取消注册此实例,以便运行时不会从将来 Java.Interop.JniRuntime+JniValueManager.PeekValue 的调用中返回它。

(继承自 IJavaPeerable)

显式接口实现

IIterable.Spliterator()

在此集合中的元素上创建一个 Spliterator

(继承自 ICollection)

扩展方法

JavaCast<TResult>(IJavaObject)

执行 Android 运行时检查的类型转换。

JavaCast<TResult>(IJavaObject)

此外 Queue ,它支持在检索元素时等待队列变为非空的操作,并在存储元素时等待队列中可用空间。

GetJniTypeName(IJavaPeerable)

此外 Queue ,它支持在检索元素时等待队列变为非空的操作,并在存储元素时等待队列中可用空间。

OfferAsync(IBlockingQueue, Object)

此外 Queue ,它支持在检索元素时等待队列变为非空的操作,并在存储元素时等待队列中可用空间。

OfferAsync(IBlockingQueue, Object, Int64, TimeUnit)

此外 Queue ,它支持在检索元素时等待队列变为非空的操作,并在存储元素时等待队列中可用空间。

PollAsync(IBlockingQueue, Int64, TimeUnit)

此外 Queue ,它支持在检索元素时等待队列变为非空的操作,并在存储元素时等待队列中可用空间。

PutAsync(IBlockingQueue, Object)

此外 Queue ,它支持在检索元素时等待队列变为非空的操作,并在存储元素时等待队列中可用空间。

TakeAsync(IBlockingQueue)

此外 Queue ,它支持在检索元素时等待队列变为非空的操作,并在存储元素时等待队列中可用空间。

ToEnumerable(IIterable)

此外 Queue ,它支持在检索元素时等待队列变为非空的操作,并在存储元素时等待队列中可用空间。

ToEnumerable<T>(IIterable)

此外 Queue ,它支持在检索元素时等待队列变为非空的操作,并在存储元素时等待队列中可用空间。

适用于