語言

IBlockingQueue 介面

定義

Queue A 也支援在取用元素時等待佇列非空,並在儲存元素時等待佇列空間可用。

[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 A 也支援在取用元素時等待佇列非空,並在儲存元素時等待佇列空間可用。

BlockingQueue方法有四種形式,處理操作的方式不同,無法立即滿足,但未來某時可能被滿足:一種拋出例外,另一種回傳特殊值(視操作而nullfalse定為 或 ),第三種會無限阻擋當前執行緒直到操作成功,第四種則只阻塞指定的最大時間限制後放棄。 這些方法總結於下表:

<table class=“plain”caption><> BlockingQueue 方法<摘要/caption><tr><td></td><th scope=“col” style=“font-weight:normal; font-style:italic”>拋出exception</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: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/td td><>/td#offer(Object, long, TimeUnit) offer(e, time, unit)<></tr><tr><scope = ”row“ style=”text-align:left“>Remove</th><td>#remove() remove()</td td><>/td#poll() poll()<TD><>/TD#take() take()<TD><>/TD#poll(long, TimeUnit) poll(time, unit)</TR><TR><th scope=“row” style=“text-align:left”>Examine</th><td><>/td#element() element()<td/td><td td>#peek() peek()< style=“font-style: italicable”>not applicable</td><td style=“font-style: italic”>not application/<td></tr></table ><>

A BlockingQueue 不接受 null 元素。 實作會嘗試 NullPointerException , addput或 offernull。 A null 作為哨兵值用來表示操作失敗 poll 。

A BlockingQueue 可能有容量限制。 在任何時刻,它可能有 , remainingCapacity 超過此範圍,否則無法有其他元素, put 否則會被阻塞。 BlockingQueue A 若無內在容量限制,則總是報告剩餘容量為 Integer.MAX_VALUE。

BlockingQueue實作主要設計用於生產者-消費者佇列,但同時也支援介面。Collection 例如,可以用 從佇列 remove(x)中移除任意元素。 然而,這類操作通常 <em>not</em> 執行效率很高,且僅偶爾使用,例如排隊訊息被取消時。

BlockingQueue 實作是執行緒安全的。 所有排隊方法皆透過內部鎖或其他並發控制方式以原子方式達成其效果。 然而,<em>bulk</em> 收集操作 addAll、 containsAll、 retainAllremoveAll 是 <em>不<>一定是原子式執行,除非實作另有說明。 因此,例如,在 addAll(c) 只加入部分元素 c後,有可能失敗(拋出例外)。

ABlockingQueue:他們不<>支持<>/他們本質上支持任何形式的「」結束!或 ”關閉&操作表示不會再新增更多項目。 這些功能的需求與使用通常取決於實作方式。 例如,常見的策略是生產者插入特殊的 <em 結束/em><> 或 em<毒>物/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();
              }
            }}

記憶體一致性效應:與其他並行集合一樣,執行緒中在將物件放入 BlockingQueue<i><> 之前/i 之前的動作,發生在該元素BlockingQueue從另一個執行緒中移除後。

此介面是 Java 集合框架的成員。

已在1.5中新增。

Java 文件 java.util.concurrent.BlockingQueue。

本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。

屬性

名稱 Description
Handle

取得底層 Android 物件的 JNI 值。

(繼承來源 IJavaObject)
IsEmpty

若此處Collection不包含任何元素,則回傳true。

(繼承來源 ICollection)
JniIdentityHashCode

回傳包裹實例的 java.lang.System.identityHashCode() 值。

(繼承來源 IJavaPeerable)
JniManagedPeerState

管理貴族的狀況。

(繼承來源 IJavaPeerable)
JniObjectReferenceControlBlock

Queue A 也支援在取用元素時等待佇列非空,並在儲存元素時等待佇列空間可用。

(繼承來源 IJavaPeerable)
JniPeerMembers

成員存取與召喚支援。

(繼承來源 IJavaPeerable)
PeerReference

回傳JniObjectReference包裹後的 Java 物件實例。

(繼承來源 IJavaPeerable)

方法

名稱 Description
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)

若該元素存在,則從佇列中移除該元素的單一實例。

RemoveAll(ICollection)

移除該集合中所有同時包含於指定集合中的元素(可選操作)。

(繼承來源 ICollection)
RemoveIf(IPredicate)

移除該集合中所有滿足該謂詞的元素(可選操作)。

(繼承來源 ICollection)
RetainAll(ICollection)

只保留該集合中包含於指定集合中的元素(可選操作)。

(繼承來源 ICollection)
SetJniIdentityHashCode(Int32)

將回傳的值設為 JniIdentityHashCode。

(繼承來源 IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

Queue A 也支援在取用元素時等待佇列非空,並在儲存元素時等待佇列空間可用。

(繼承來源 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)

明確介面實作

名稱 Description
IIterable.Spliterator()

在此集合中建立 元素 Spliterator 。

(繼承來源 ICollection)

擴充方法

名稱 Description
GetJniTypeName(IJavaPeerable)

取得實例 self類型的 JNI 名稱。

JavaAs<TResult>(IJavaPeerable)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

JavaCast<TResult>(IJavaObject)

執行 Android 執行時檢查型別轉換。

JavaCast<TResult>(IJavaObject)

Queue A 也支援在取用元素時等待佇列非空,並在儲存元素時等待佇列空間可用。

OfferAsync(IBlockingQueue, Object, Int64, TimeUnit)

Queue A 也支援在取用元素時等待佇列非空,並在儲存元素時等待佇列空間可用。

OfferAsync(IBlockingQueue, Object)

Queue A 也支援在取用元素時等待佇列非空,並在儲存元素時等待佇列空間可用。

PollAsync(IBlockingQueue, Int64, TimeUnit)

Queue A 也支援在取用元素時等待佇列非空,並在儲存元素時等待佇列空間可用。

PutAsync(IBlockingQueue, Object)

Queue A 也支援在取用元素時等待佇列非空,並在儲存元素時等待佇列空間可用。

TakeAsync(IBlockingQueue)

Queue A 也支援在取用元素時等待佇列非空,並在儲存元素時等待佇列空間可用。

ToEnumerable(IIterable)

回傳 和 IEnumerable ,會對 Java IIterable進行迭代,允許 foreach 和 LINQ 與 Java 集合類型一起使用。 每個元素都會從其 Java 實例編組到對應的受管理型別。

ToEnumerable<T>(IIterable)

回傳 和 IEnumerable<T> ,該 在 Java IIterable上迭代,將每個元素 集結為 T。 這使得 foreach LINQ 可以搭配 Java 集合類型一起使用。

TryJavaCast<TResult>(IJavaPeerable, TResult)

試著強制self輸入 TResult,檢查 強制在 Java 端是否有效。

適用於