次の方法で共有


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">caption Summary of BlockingQueue methods</caption><tr><td></td><th scope="col" style="font-weight:normal; font-style:italic">Throws exception</th th><scope="col" style="font-weight:normal; font-style:italic">Special value</th><th scope="col" style="font-weight:normal; font-style:italic">Blocks</th 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/td>#poll() poll()<><td>#take() take()</td><td>#poll(long, TimeUnit) poll(time, unit)</td></tr><tr><th scope="row" style="text-align:left">Examine</th><td>#element() element()</td td><><#peek() peek() td td><style="font-style: italic">not applicable</td td><style="font-style: italic">not applicable</td<>/tr></table>

A BlockingQueue は要素を受け入れ null ません。 実装は、または 〘 をnullofferputadd試行したときにスローNullPointerExceptionされます。 A null は、操作の poll 失敗を示すセンチネル値として使用されます。

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

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

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

A BlockingQueue は本質的に任意の種類の > をサポートしていません<><。>close>または >shutdown>は、追加される項目がないことを示す操作です。 このような機能のニーズと使用方法は、実装に依存する傾向があります。 たとえば、プロデューサーが特殊な <em>end-of-stream</em> オブジェクトや <em>poison</em> オブジェクトを挿入する方法が一般的です。これは、コンシューマーが取得したときにそれに応じて解釈されます。

一般的なプロデューサー/コンシューマー シナリオに基づく使用例。 a は、複数の 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へのアクセスまたは削除の後に発生<する前/i> アクションになります。

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

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

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

このページの一部は、Android オープンソース プロジェクトによって作成および共有され、クリエイティブ コモンズ 2.5 属性ライセンスに記載されている条件に従って使用される作業に基づく変更です。

プロパティ

Handle

基になる Android オブジェクトの JNI 値を取得します。

(継承元 IJavaObject)
IsEmpty

要素 Collection が含まれている場合に返します。

(継承元 ICollection)
JniIdentityHashCode

ラップされたインスタンスの java.lang.System.identityHashCode() 値を返します。

(継承元 IJavaPeerable)
JniManagedPeerState

マネージド ピアの状態。

(継承元 IJavaPeerable)
JniPeerMembers

メンバー アクセスと呼び出しのサポート。

(継承元 IJavaPeerable)
PeerReference

ラップされた Java オブジェクト インスタンスの a JniObjectReference を返します。

(継承元 IJavaPeerable)

メソッド

Add(Object)

容量制限に違反せずにすぐに実行できる場合は、指定された要素をこのキューに挿入し、成功時に戻り true 、現在使用可能な領域がない場合は an を 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これで説明されている要素の上に a を作成しますIterable

(継承元 IIterable)
Take()

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

ToArray()

このコレクション内のすべての要素を含む配列を返します。

(継承元 ICollection)
ToArray(IIntFunction)

指定された関数を使用して generator 返された配列を割り当て、このコレクション内のすべての要素を含む配列を返します。

(継承元 ICollection)
ToArray(Object[])

このコレクション内のすべての要素を含む配列を返します。返される配列のランタイム型は、指定された配列のランタイム型です。

(継承元 ICollection)
UnregisterFromRuntime()

ランタイムが将来 Java.Interop.JniRuntime+JniValueManager.PeekValue の呼び出しから返されないように、このインスタンスの登録を解除します。

(継承元 IJavaPeerable)

明示的なインターフェイスの実装

IIterable.Spliterator()

Spliteratorこのコレクション内の要素の上に a を作成します。

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

適用対象