IBlockingQueue 介面
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
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 |
若此處 |
| JniIdentityHashCode |
回傳包裹實例的 |
| JniManagedPeerState |
管理貴族的狀況。 (繼承來源 IJavaPeerable) |
| JniObjectReferenceControlBlock |
|
| JniPeerMembers |
成員存取與召喚支援。 (繼承來源 IJavaPeerable) |
| PeerReference |
回傳JniObjectReference包裹後的 Java 物件實例。 (繼承來源 IJavaPeerable) |
方法
| 名稱 | Description |
|---|---|
| Add(Object) |
若可立即插入指定元素且不違反容量限制,則插入該佇列;成功時返回 |
| AddAll(ICollection) |
將指定集合中的所有元素加入此集合(可選操作)。 (繼承來源 ICollection) |
| Clear() |
移除此集合中的所有元素(可選操作)。 (繼承來源 ICollection) |
| Contains(Object) |
若佇列包含指定元素,則回傳 |
| ContainsAll(ICollection) |
若此集合包含指定集合中的所有元素,則回傳 |
| Disposed() |
當實例被處理後才被召喚。 (繼承來源 IJavaPeerable) |
| DisposeUnlessReferenced() |
如果沒有未解決的參考資料,則 |
| DrainTo(ICollection, Int32) |
最多從該佇列中移除指定數量的可用元素,並將其加入給定的集合中。 |
| DrainTo(ICollection) |
從此佇列中移除所有可用元素,並將其加入給定的集合中。 |
| Element() |
擷取但不移除此隊列的首端。 (繼承來源 IQueue) |
| Equals(Object) |
比較指定物件與此集合以求相等。 (繼承來源 ICollection) |
| Finalized() |
當實例完成後才會被通知。 (繼承來源 IJavaPeerable) |
| ForEach(IConsumer) |
對每個元素 |
| GetHashCode() |
回傳此集合的雜湊碼值。 (繼承來源 ICollection) |
| Iterator() |
回傳該集合中元素的迭代器。 (繼承來源 ICollection) |
| Offer(Object, Int64, TimeUnit) |
將指定元素插入此佇列,必要時可等待至指定時間以待空間。 |
| Offer(Object) |
若可立即插入且不違反容量限制,則將指定元素插入此佇列,成功後 |
| Peek() |
擷取但不移除該佇列的首部,若該佇列為空則返回 |
| Poll() |
擷取並移除此佇列的首,或若佇列為空則返回 |
| Poll(Int64, TimeUnit) |
擷取並移除此佇列的頭部,必要時會等待指定等待時間以讓元素可用。 |
| Put(Object) |
將指定元素插入此佇列,必要時等待空間可用。 |
| RemainingCapacity() |
回傳這個佇列理想上(在沒有記憶體或資源限制的情況下)可接受且不阻塞,或 |
| Remove() |
擷取並移除此佇列的頭部。 (繼承來源 IQueue) |
| Remove(Object) |
若該元素存在,則從佇列中移除該元素的單一實例。 |
| RemoveAll(ICollection) |
移除該集合中所有同時包含於指定集合中的元素(可選操作)。 (繼承來源 ICollection) |
| RemoveIf(IPredicate) |
移除該集合中所有滿足該謂詞的元素(可選操作)。 (繼承來源 ICollection) |
| RetainAll(ICollection) |
只保留該集合中包含於指定集合中的元素(可選操作)。 (繼承來源 ICollection) |
| SetJniIdentityHashCode(Int32) |
將回傳的值設為 |
| SetJniManagedPeerState(JniManagedPeerStates) |
|
| SetPeerReference(JniObjectReference) |
將回傳的值設為 |
| Size() |
回傳此集合中的元素數量。 (繼承來源 ICollection) |
| Spliterator() |
在由此 |
| Take() |
擷取並移除此佇列的頭部,必要時等待元素可用。 |
| ToArray() |
回傳包含此集合中所有元素的陣列。 (繼承來源 ICollection) |
| ToArray(IIntFunction) |
回傳包含此集合中所有元素的陣列,並使用所提供的 |
| ToArray(Object[]) |
回傳包含此集合中所有元素的陣列;回傳陣列的執行時型別即為指定陣列的類型。 (繼承來源 ICollection) |
| UnregisterFromRuntime() |
取消註冊此實例,讓執行時不會在未來 Java.Interop.JniRuntime+JniValueManager.PeekValue 的呼叫中回傳該實例。 (繼承來源 IJavaPeerable) |
明確介面實作
| 名稱 | Description |
|---|---|
| IIterable.Spliterator() |
在此集合中建立 元素 |
擴充方法
| 名稱 | Description |
|---|---|
| GetJniTypeName(IJavaPeerable) |
取得實例 |
| JavaAs<TResult>(IJavaPeerable) |
試著強制 |
| JavaCast<TResult>(IJavaObject) |
執行 Android 執行時檢查型別轉換。 |
| JavaCast<TResult>(IJavaObject) |
|
| OfferAsync(IBlockingQueue, Object, Int64, TimeUnit) |
|
| OfferAsync(IBlockingQueue, Object) |
|
| PollAsync(IBlockingQueue, Int64, TimeUnit) |
|
| PutAsync(IBlockingQueue, Object) |
|
| TakeAsync(IBlockingQueue) |
|
| ToEnumerable(IIterable) |
回傳 和 IEnumerable ,會對 Java IIterable進行迭代,允許 |
| ToEnumerable<T>(IIterable) |
回傳 和 IEnumerable<T> ,該 在 Java IIterable上迭代,將每個元素 集結為 |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
試著強制 |