ForkJoinPool.IManagedBlocker インターフェイス
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
s で ForkJoinPool
実行されているタスクのマネージド並列処理を拡張するためのインターフェイス。
[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
- 属性
- 実装
注釈
s で ForkJoinPool
実行されているタスクのマネージド並列処理を拡張するためのインターフェイス。
A ManagedBlocker
には 2 つのメソッドがあります。 ブロッキングが不要な場合、メソッド #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 ドキュメントjava.util.concurrent.ForkJoinPool.ManagedBlocker
このページの一部は、Android オープンソース プロジェクトによって作成および共有され、クリエイティブ コモンズ 2.5 属性ライセンスに記載されている条件に従って使用される作業に基づく変更です。
プロパティ
Handle |
基になる Android オブジェクトの JNI 値を取得します。 (継承元 IJavaObject) |
IsReleasable |
s で |
JniIdentityHashCode |
ラップされたインスタンスの |
JniManagedPeerState |
マネージド ピアの状態。 (継承元 IJavaPeerable) |
JniPeerMembers |
メンバー アクセスと呼び出しのサポート。 (継承元 IJavaPeerable) |
PeerReference |
ラップされた Java オブジェクト インスタンスの a JniObjectReference を返します。 (継承元 IJavaPeerable) |
メソッド
Block() |
ロックや条件の待機など、現在のスレッドをブロックする可能性があります。 |
Disposed() |
インスタンスが破棄されたときに呼び出されます。 (継承元 IJavaPeerable) |
DisposeUnlessReferenced() |
このインスタンスへの未処理の参照がない場合は、呼び出 |
Finalized() |
インスタンスが終了したときに呼び出されます。 (継承元 IJavaPeerable) |
SetJniIdentityHashCode(Int32) |
によって |
SetJniManagedPeerState(JniManagedPeerStates) |
s で |
SetPeerReference(JniObjectReference) |
によって |
UnregisterFromRuntime() |
ランタイムが将来 Java.Interop.JniRuntime+JniValueManager.PeekValue の呼び出しから返されないように、このインスタンスの登録を解除します。 (継承元 IJavaPeerable) |
拡張メソッド
JavaCast<TResult>(IJavaObject) |
Android ランタイムチェック型変換を実行します。 |
JavaCast<TResult>(IJavaObject) |
s で |
GetJniTypeName(IJavaPeerable) |
s で |