ForkJoinPool.IManagedBlocker 介面
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
擴充 中 ForkJoinPool
執行之工作的Managed平行處理原則的介面。
[Android.Runtime.Register("java/util/concurrent/ForkJoinPool$ManagedBlocker", "", "Java.Util.Concurrent.ForkJoinPool/IManagedBlockerInvoker")]
public interface ForkJoinPool.IManagedBlocker : Android.Runtime.IJavaObject, IDisposable, Java.Interop.IJavaPeerable
[<Android.Runtime.Register("java/util/concurrent/ForkJoinPool$ManagedBlocker", "", "Java.Util.Concurrent.ForkJoinPool/IManagedBlockerInvoker")>]
type ForkJoinPool.IManagedBlocker = interface
interface IJavaObject
interface IDisposable
interface IJavaPeerable
- 屬性
- 實作
備註
擴充 中 ForkJoinPool
執行之工作的Managed平行處理原則的介面。
ManagedBlocker
提供兩種方法。 如果不需要封鎖,方法 #isReleasable
必須傳回 true
。 方法 #block
會在必要時封鎖目前的線程(或許是在內部叫用 isReleasable
之前實際封鎖)。 這些動作是由任何叫用 ForkJoinPool#managedBlock(ManagedBlocker)
的線程所執行。 此 API 中的異常方法可配合同步器,這些同步器通常不會長時間封鎖。 同樣地,它們允許更有效率的內部處理案例,其中可能需要額外的背景工作,但通常不需要,以確保有足夠的平行處理原則。 為此,方法 isReleasable
的實作必須能夠重複調用。 在 之前叫用 isReleasable
或 block
傳回 true
之後,不會叫用這兩種方法。
例如,以下是以 ReentrantLock 為基礎的 ManagedBlocker:
{@code
class ManagedLocker implements ManagedBlocker {
final ReentrantLock lock;
boolean hasLock = false;
ManagedLocker(ReentrantLock lock) { this.lock = lock; }
public boolean block() {
if (!hasLock)
lock.lock();
return true;
}
public boolean isReleasable() {
return hasLock || (hasLock = lock.tryLock());
}
}}
以下是類別,可能會封鎖等候指定佇列上的專案:
{@code
class QueueTaker<E> implements ManagedBlocker {
final BlockingQueue<E> queue;
volatile E item = null;
QueueTaker(BlockingQueue<E> q) { this.queue = q; }
public boolean block() throws InterruptedException {
if (item == null)
item = queue.take();
return true;
}
public boolean isReleasable() {
return item != null || (item = queue.poll()) != null;
}
public E getItem() { // call after pool.managedBlock completes
return item;
}
}}
的 java.util.concurrent.ForkJoinPool.ManagedBlocker
Java 檔。
此頁面的部分是根據 Android 開放原始碼專案所建立和共用的工作進行修改,並根據 Creative Commons 2.5 屬性授權中所述的詞彙使用。
屬性
Handle |
取得基礎 Android 物件的 JNI 值。 (繼承來源 IJavaObject) |
IsReleasable |
擴充 中 |
JniIdentityHashCode |
傳回包裝實例的 值 |
JniManagedPeerState |
受控對等的狀態。 (繼承來源 IJavaPeerable) |
JniPeerMembers |
成員存取和調用支援。 (繼承來源 IJavaPeerable) |
PeerReference |
傳 JniObjectReference 回已包裝 Java 物件實例的 。 (繼承來源 IJavaPeerable) |
方法
Block() |
可能會封鎖目前的線程,例如等候鎖定或條件。 |
Disposed() |
處置實例時呼叫。 (繼承來源 IJavaPeerable) |
DisposeUnlessReferenced() |
如果這個實例沒有未完成的參考,則呼叫 |
Finalized() |
實例完成時呼叫。 (繼承來源 IJavaPeerable) |
SetJniIdentityHashCode(Int32) |
設定所 |
SetJniManagedPeerState(JniManagedPeerStates) |
擴充 中 |
SetPeerReference(JniObjectReference) |
設定所 |
UnregisterFromRuntime() |
取消註冊此實例,讓運行時間不會從未來的 Java.Interop.JniRuntime+JniValueManager.PeekValue 調用傳回它。 (繼承來源 IJavaPeerable) |
擴充方法
JavaCast<TResult>(IJavaObject) |
執行 Android 執行時間檢查的類型轉換。 |
JavaCast<TResult>(IJavaObject) |
擴充 中 |
GetJniTypeName(IJavaPeerable) |
擴充 中 |