共用方式為


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 方法有四種形式,具有無法立即滿足的不同處理作業方式,但在未來某個時間點可能會滿足:一個擲回例外狀況,第二個會傳回特殊值( nullfalse,視作業而定),第三個會無限期地封鎖目前線程,直到作業可以成功,而第四個區塊在放棄之前只會有指定的最大時間限制。 下表摘要說明這些方法:

<table class=“plain”>caption BlockingQueue 方法的<摘要/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: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)/<>>#offer(Object, long, TimeUnit) offer(e, time, unit)<<><<>>><#offer(Object) offer(e)<>#put(Object) put(e)td td/tr tr<<>>th scope=”row“ style=”text-align:left“>Remove</th><<>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”>Check</<>th><td<#element() element()>/<>>#peek() peek()<td style=“font-style: italic”>not applicable</td><td style=“font-style: italic”>not applicable</td<>/tr></table>

BlockingQueue不接受null專案。 實作會在嘗試 時擲回 addNullPointerExceptionputoffernullnull做為 sentinel 值,表示作業失敗poll

BlockingQueue可能是容量系結。 在任何指定的時間,它可能會有 remainingCapacity ,除此之外,沒有任何額外的元素可以 put 沒有封鎖。 BlockingQueue沒有任何內部容量條件約束的 Integer.MAX_VALUE,一律會報告 的剩餘容量。

BlockingQueue 實作的設計主要用於生產者-取用者佇列,但另外支援 Collection 介面。 因此,例如,您可以使用 從佇列 remove(x)中移除任意專案。 不過,這類作業通常<不是></em> 執行得非常有效率,而且僅供偶爾使用,例如當佇列訊息取消時。

BlockingQueue 實作是安全線程。 所有佇列方法都會使用內部鎖定或其他形式的並行控制,以不可部分完成的方式達成其效果。 不過,除非在實作中另有指定,<否則 em>bulk</em>> 集合作業 addAllcontainsAllretainAllremoveAll 不<<>一定會以不可部分完成的方式執行。 因此,例如,在 中只新增一些元素c之後,addAll(c)可能會失敗(擲回例外狀況)。

不會BlockingQueue><</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();
              }
            }}

記憶體一致性效果:如同其他並行集合一樣,將物件放入 i>發生<前/i> 動作之後,線程中的動作會從BlockingQueue另一BlockingQueue<個線程中的 存取或移除該元素。

這個介面是 Java Collections Framework 的成員

已在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)

如果可以立即執行,而不違反容量限制,在成功時傳回 ,並在目前沒有可用空間時擲IllegalStateExceptiontrue ,請將指定的專案插入此佇列中。

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,另外支援在擷取專案時等候佇列變成非空白的作業,並在儲存專案時等待佇列中可用的空間。

適用於