言語

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 つ目は特別な値 (操作によっては null または falseを返します)、3 つ目は操作が成功するまで現在のスレッドを無期限にブロックし、4 番目のブロックは、指定された最大時間制限のみをブロックしてから、終了します。 これらのメソッドを次の表にまとめます。

<table class="plain"><caption> BlockingQueue メソッドのSummary</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>#poll() poll()</td><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 ><td>#peek() peek()</td><td style="font-style: italic">適用できません</td><td style="font-style: italic"> applicable</td></tr></table>

BlockingQueueは、null要素を受け入れません。 実装では、NullPointerExceptionaddput、またはofferしようとすると、nullがスローされます。 nullは、poll操作の失敗を示すセンチネル値として使用されます。

BlockingQueueは容量が制限されている可能性があります。 任意の時点で、ブロックせずに追加の要素をremainingCapacityできないputが存在する可能性があります。 組み込みの容量制約のない BlockingQueue は、常に Integer.MAX_VALUEの残りの容量を報告します。

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

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

BlockingQueueでは、<em></em>任意の種類の " が本質的にサポートされます。close>または >shutdown>は、追加される項目がないことを示す操作です。 このような機能のニーズと使用方法は、実装に依存する傾向があります。 たとえば、プロデューサーが特殊な <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();
              }
            }}

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

このインターフェイスは、Java コレクション フレームワークのメンバーです

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

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

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

プロパティ

名前 説明
Handle

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

(継承元 IJavaObject)
IsEmpty

このCollectionに要素が含trueを返します。

(継承元 ICollection)
JniIdentityHashCode

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

(継承元 IJavaPeerable)
JniManagedPeerState

マネージド ピアの状態。

(継承元 IJavaPeerable)
JniObjectReferenceControlBlock

要素の取得時にキューが空でない状態になるのを待機し、要素を格納するときにキュー内の領域が使用可能になるのを待つ操作をさらにサポートする Queue

(継承元 IJavaPeerable)
JniPeerMembers

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

(継承元 IJavaPeerable)
PeerReference

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

(継承元 IJavaPeerable)

メソッド

名前 説明
Add(Object)

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

AddAll(ICollection)

指定したコレクション内のすべての要素をこのコレクションに追加します (省略可能な操作)。

(継承元 ICollection)
Clear()

このコレクションからすべての要素を削除します (省略可能な操作)。

(継承元 ICollection)
Contains(Object)

このキューに指定した要素が含まれている場合は、 true を返します。

ContainsAll(ICollection)

このコレクションに指定したコレクション内のすべての要素が含まれている場合は、 true を返します。

(継承元 ICollection)
Disposed()

インスタンスが破棄されたときに呼び出されます。

(継承元 IJavaPeerable)
DisposeUnlessReferenced()

このインスタンスへの未処理の参照がない場合は、 Dispose()を呼び出します。それ以外の場合は何も実行しません。

(継承元 IJavaPeerable)
DrainTo(ICollection, Int32)

このキューから指定された数の使用可能な要素を最大で削除し、指定されたコレクションに追加します。

DrainTo(ICollection)

このキューから使用可能なすべての要素を削除し、指定されたコレクションに追加します。

Element()

このキューの先頭を取得しますが、削除しません。

(継承元 IQueue)
Equals(Object)

指定したオブジェクトをこのコレクションと比較して等しいかどうかを確認します。

(継承元 ICollection)
Finalized()

インスタンスが終了したときに呼び出されます。

(継承元 IJavaPeerable)
ForEach(IConsumer)

すべての要素が処理されるか、アクションが例外をスローするまで、 Iterable の各要素に対して指定されたアクションを実行します。

(継承元 IIterable)
GetHashCode()

このコレクションのハッシュ コード値を返します。

(継承元 ICollection)
Iterator()

このコレクション内の要素に対する反復子を返します。

(継承元 ICollection)
Offer(Object, Int64, TimeUnit)

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

Offer(Object)

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

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)

拡張メソッド

名前 説明
GetJniTypeName(IJavaPeerable)

インスタンス selfの型の JNI 名を取得します。

JavaAs<TResult>(IJavaPeerable)

selfを強制的にTResult入力し、強制型がJava側で有効であることを確認します。

JavaCast<TResult>(IJavaObject)

Android ランタイムチェック型変換を実行します。

JavaCast<TResult>(IJavaObject)

要素の取得時にキューが空でない状態になるのを待機し、要素を格納するときにキュー内の領域が使用可能になるのを待つ操作をさらにサポートする Queue

OfferAsync(IBlockingQueue, Object, Int64, TimeUnit)

要素の取得時にキューが空でない状態になるのを待機し、要素を格納するときにキュー内の領域が使用可能になるのを待つ操作をさらにサポートする Queue

OfferAsync(IBlockingQueue, Object)

要素の取得時にキューが空でない状態になるのを待機し、要素を格納するときにキュー内の領域が使用可能になるのを待つ操作をさらにサポートする Queue

PollAsync(IBlockingQueue, Int64, TimeUnit)

要素の取得時にキューが空でない状態になるのを待機し、要素を格納するときにキュー内の領域が使用可能になるのを待つ操作をさらにサポートする Queue

PutAsync(IBlockingQueue, Object)

要素の取得時にキューが空でない状態になるのを待機し、要素を格納するときにキュー内の領域が使用可能になるのを待つ操作をさらにサポートする Queue

TakeAsync(IBlockingQueue)

要素の取得時にキューが空でない状態になるのを待機し、要素を格納するときにキュー内の領域が使用可能になるのを待つ操作をさらにサポートする Queue

ToEnumerable(IIterable)

Java IIterableを反復処理するIEnumerableを返します。これにより、foreachと LINQ をJavaコレクション型で使用できます。 各要素は、Java インスタンスから対応するマネージド型にマーシャリングされます。

ToEnumerable<T>(IIterable)

Java IIterableを反復処理し、各要素をTにマーシャリングするIEnumerable<T>を返します。 これにより、foreachと LINQ をJavaコレクション型で使用できます。

TryJavaCast<TResult>(IJavaPeerable, TResult)

selfを強制的にTResult入力し、強制型がJava側で有効であることを確認します。

適用対象