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メソッドは 4 つの形式で提供され、すぐには満たすことができないが、将来ある時点で満たされる可能性がある操作を処理する方法が異なります。1 つは例外をスローし、2 つ目は特別な値 (操作に応じて または falseのいずれかnull) を返し、3 番目は操作が成功するまで現在のスレッドを無期限にブロックし、4 番目のブロックは特定の最大時間制限のみをブロックしてから終了します。 これらのメソッドを次の表にまとめます。

<table class="plain">キャプションSummary of BlockingQueue methods</キャプション><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><#offer(Object, long, TimeUnit) offer(e, time, unit)/td></tr tr>><<th scope="row" style="text-align:left">Remove</th><td><#remove() remove()/td td/td<><>#poll() poll()/tdtd><#take() take()/td><td>#poll(long, TimeUnit) poll(time, unit)</td></tr><<>th scope="row" style="text-align:left">Examine</th<>td>#element() element()</td td><td#peek() peek()<> style<>="font-style: italic">not applicable</td td><style="font-style: italic">not applicable</td></tr></table ><>

BlockingQueue 要素を受け入れて null いません。 実装は、 または offer への試行時に putaddnullスローNullPointerExceptionします。 nullは、操作のpoll失敗を示すために sentinel 値として使用されます。

BlockingQueue 容量に制限されている場合があります。 任意の時点で、ブロックなしで追加の要素を使用できない put を持つことができますremainingCapacity。 組み込みの容量制約のない は BlockingQueue 、常に の残りの容量 Integer.MAX_VALUEを報告します。

BlockingQueue 実装は、主にプロデューサー/コンシューマー キューに使用されるように設計されていますが、 インターフェイスもサポート Collection されます。 そのため、たとえば、 を使用して remove(x)キューから任意の要素を削除できます。 ただし、このような操作は一般<>に、em not</em> は非常に効率的に実行され、キューに入ったメッセージが取り消されたときなど、不定期の使用のみを目的としています。

BlockingQueue 実装はスレッド セーフです。 すべてのキュー メソッドは、内部ロックまたはその他の形式のコンカレンシー制御を使用してアトミックに効果を実現します。 ただし、em bulk/em> Collection 操作 addAll、、containsAllretainAllおよび removeAll は、<>実装で特に指定されていない限り、必ずしもアトミックに実行されません<>。<>< そのため、たとえば、 addAll(c) に要素 cの一部のみを追加した後に失敗 (例外をスロー) することが可能です。

A BlockingQueue は、あらゆる種類の &量子を本質的にサポートしません。<><>quot&閉じます。または "シャットダウン&量子。操作を実行して、項目が追加されなくなることを示します。 このような機能のニーズと使用方法は、実装に依存する傾向があります。 たとえば、プロデューサーが特別な <em>end-of-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();
              }
            }}

メモリ整合性の効果: 他の同時実行コレクションと同様に、オブジェクトを i>にBlockingQueue<配置する前のスレッド内のアクションは、別のスレッド内の からBlockingQueueその要素にアクセスまたは削除された後に発生<>します。

このインターフェイスは、 Java Collections Framework のメンバーです。

1\.5 で追加されました。

の Java ドキュメント java.util.concurrent.BlockingQueue

このページの一部は、によって作成および共有され、に記載されている条件に従って使用される作業に基づく変更です。

プロパティ

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)

容量制限に違反せずにすぐに実行できる場合、成功false時に を返し、現在使用できる領域がない場合は、指定された要素をtrueこのキューに挿入します。

Offer(Object, Int64, TimeUnit)

指定した要素をこのキューに挿入し、領域が使用可能になるまで必要な場合は、指定された待機時間まで待機します。

Peek()

このキューの先頭を取得しますが、削除しません。このキューが空の場合は を null 返します。

(継承元 IQueue)
Poll()

このキューの先頭を取得して削除するか、このキューが空の場合は を null 返します。

(継承元 IQueue)
Poll(Int64, TimeUnit)

このキューの先頭を取得して削除し、要素が使用可能になるまで必要に応じて、指定された待機時間まで待機します。

Put(Object)

指定した要素をこのキューに挿入し、必要に応じて空き領域が使用可能になるまで待機します。

RemainingCapacity()

このキューが(メモリまたはリソースの制約がない場合に) ブロックせずに受け入れられる、または Integer.MAX_VALUE 組み込みの制限がない場合に受け入れられる追加要素の数を返します。

Remove()

このキューの先頭を取得して削除します。

(継承元 IQueue)
Remove(Object)

指定した要素の 1 つのインスタンスが存在する場合は、このキューから削除します。

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さらに、要素の取得時にキューが空でない状態になるのを待ち、要素を格納するときにキューで空き領域が使用可能になるのを待つ操作をサポートする 。

適用対象