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

<table class=“plain”>標題 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<>><th scope=“col” style=“font-weight:normal;font-style:italic“>Times out</th></tr tr><<>th scope=”row“ style=”text-align:left“>Insert</#put(Object) put(e)<<>>th><td><#add(Object) add(e)/td><<>#offer(Object) offer(e)/td td/<><<>#offer(Object, long, TimeUnit) offer(e, time, unit)>tr><th<>scope=”row“ style=”text-align:left“>Remove</th<>td#remove() remove()<>/td<>/td>#poll() poll()<td>#take() take()</td><td><#poll(long, TimeUnit) poll(time, unit)/td></tr>><<th scope=“row” style=“text-align:left”>Check</th<>td#element() element()<>/<>td#peek() peek()<> style=“font-style: italic”>not applicable</td><td style=“font-style: italic”>not applicable</td><></tr></table ><>

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

BlockingQueue可能是容量限定。 在任何指定的時間,它可能都有 remainingCapacity ,而沒有其他元素可以 put 沒有封鎖。 沒有 BlockingQueue 任何內建容量條件約束的 ,一律會報告 的 Integer.MAX_VALUE剩餘容量。

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

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

<不會 BlockingQueue em></em> 內建支援任何類型的 &商;close"或 &商;關機&商;作業,表示不會再新增任何專案。 這類功能的需求和使用方式通常相依於實作。 例如,常見的策略是讓產生者插入特殊 <em>結束數據流</em> 或 <em>有害</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 檔。

此頁面的部分是根據 原始碼專案所建立和共用的工作進行修改,並根據 中所述的詞彙使用。

屬性

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

適用於