IBlockingQueue 接口
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
此外 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
实现在尝试offer
add
put
或 a .null
A null
用作 sentinel 值来指示操作失败 poll
。
A BlockingQueue
可能受容量限制。 在任何给定时间,它都有一个 remainingCapacity
超出此范围,没有其他元素可以 put
不受阻止。 没有任何固有容量约束的始终 BlockingQueue
报告剩余容量 Integer.MAX_VALUE
。
BlockingQueue
实现主要用于生成方-使用者队列,但另外还支持 Collection
接口。 因此,例如,可以使用 从队列 remove(x)
中删除任意元素。 但是,此类操作通常<>不是</em> 非常高效地执行,并且仅用于偶尔使用,例如取消排队消息时。
BlockingQueue
实现是线程安全的。 所有队列方法都使用内部锁或其他形式的并发控制以原子方式实现其效果。 但是,em bulk/em>> Collection 操作containsAll
addAll
和 removeAll
<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.BlockingQueue
Java 文档
本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。
属性
Handle |
获取基础 Android 对象的 JNI 值。 (继承自 IJavaObject) |
IsEmpty |
如果不包含 |
JniIdentityHashCode |
返回包装实例的值 |
JniManagedPeerState |
托管对等方的状态。 (继承自 IJavaPeerable) |
JniPeerMembers |
成员访问和调用支持。 (继承自 IJavaPeerable) |
PeerReference |
返回 JniObjectReference 包装的 Java 对象实例。 (继承自 IJavaPeerable) |
方法
Add(Object) |
如果可以立即执行此操作而不违反容量限制,则向此队列插入指定的元素,并在成功后返回 |
AddAll(ICollection) |
将指定集合中的所有元素添加到此集合(可选操作)。 (继承自 ICollection) |
Clear() |
从此集合中删除所有元素(可选操作)。 (继承自 ICollection) |
Contains(Object) |
返回 |
ContainsAll(ICollection) |
如果 |
Disposed() |
在释放实例时调用。 (继承自 IJavaPeerable) |
DisposeUnlessReferenced() |
如果没有对此实例的未完成引用,则调用 |
DrainTo(ICollection) |
从此队列中删除所有可用元素,并将其添加到给定集合。 |
DrainTo(ICollection, Int32) |
从此队列中移除最多给定数量的可用元素,并将其添加到给定集合。 |
Element() |
检索此队列的头,但不删除。 (继承自 IQueue) |
Equals(Object) |
将指定的对象与此集合进行比较,以便相等。 (继承自 ICollection) |
Finalized() |
在实例完成时调用。 (继承自 IJavaPeerable) |
ForEach(IConsumer) |
对每个元素执行给定操作,直到处理完所有元素 |
GetHashCode() |
返回此集合的哈希代码值。 (继承自 ICollection) |
Iterator() |
返回此集合中元素的迭代器。 (继承自 ICollection) |
Offer(Object) |
如果可以立即执行此操作而不违反容量限制、 |
Offer(Object, Int64, TimeUnit) |
将指定的元素插入到此队列中,如果需要空间可用,则等待指定的等待时间。 |
Peek() |
检索但不删除此队列的头,或返回 |
Poll() |
检索和删除此队列的头,或返回 |
Poll(Int64, TimeUnit) |
检索并删除此队列的头,如有必要,等待指定的等待时间,使元素变得可用。 |
Put(Object) |
将指定的元素插入到此队列中,如有必要,等待空间变为可用。 |
RemainingCapacity() |
返回此队列理想情况下(在没有内存或资源约束的情况下)接受且没有阻塞或 |
Remove() |
检索并删除此队列的头。 (继承自 IQueue) |
Remove(Object) |
从此队列中删除指定元素的单个实例(如果存在)。 |
RemoveAll(ICollection) |
删除指定集合中包含的所有此集合元素(可选操作)。 (继承自 ICollection) |
RemoveIf(IPredicate) |
删除满足给定谓词的此集合的所有元素。 (继承自 ICollection) |
RetainAll(ICollection) |
仅保留指定集合中包含的此集合中的元素(可选操作)。 (继承自 ICollection) |
SetJniIdentityHashCode(Int32) |
设置由 |
SetJniManagedPeerState(JniManagedPeerStates) |
此外 |
SetPeerReference(JniObjectReference) |
设置由 |
Size() |
返回此集合中的元素数。 (继承自 ICollection) |
Spliterator() |
|
Take() |
检索并删除此队列的头,如有必要,请等待元素可用。 |
ToArray() |
返回一个数组,其中包含此集合中的所有元素。 (继承自 ICollection) |
ToArray(IIntFunction) |
返回包含此集合中的所有元素的数组,该数组使用提供的 |
ToArray(Object[]) |
返回一个数组,其中包含此集合中的所有元素;返回的数组的运行时类型是指定数组的运行时类型。 (继承自 ICollection) |
UnregisterFromRuntime() |
取消注册此实例,以便运行时不会从将来 Java.Interop.JniRuntime+JniValueManager.PeekValue 的调用中返回它。 (继承自 IJavaPeerable) |
显式接口实现
IIterable.Spliterator() |
在此集合中的元素上创建一个 |
扩展方法
JavaCast<TResult>(IJavaObject) |
执行 Android 运行时检查的类型转换。 |
JavaCast<TResult>(IJavaObject) |
此外 |
GetJniTypeName(IJavaPeerable) |
此外 |
OfferAsync(IBlockingQueue, Object) |
此外 |
OfferAsync(IBlockingQueue, Object, Int64, TimeUnit) |
此外 |
PollAsync(IBlockingQueue, Int64, TimeUnit) |
此外 |
PutAsync(IBlockingQueue, Object) |
此外 |
TakeAsync(IBlockingQueue) |
此外 |
ToEnumerable(IIterable) |
此外 |
ToEnumerable<T>(IIterable) |
此外 |