ForkJoinPool.IManagedBlocker 接口

定义

用于扩展在 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 提供了两种方法。 如果不需要阻止,方法 #isReleasable 必须返回 true 。 方法 #block 在必要时会阻止当前线程(可能在内部调用 isReleasable 之前实际阻塞)。 这些操作由任何线程调用 ForkJoinPool#managedBlock(ManagedBlocker)执行。 此 API 中的异常方法可适应同步器,这些同步器通常不会长时间阻止。 同样,它们允许更高效的内部处理,在这种情况下,可能需要额外的工作人员,但通常不需要,以确保足够的并行度。 为此,方法 isReleasable 的实现必须能够重复调用。 在之前调用 isReleasableblock 返回 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

本页的某些部分是根据 创建和共享的工作进行的修改,并根据 许可证中所述的条款使用。

属性

名称 说明
Handle

获取基础 Android 对象的 JNI 值。

(继承自 IJavaObject)
IsReleasable

用于扩展在 s 中 ForkJoinPool运行的任务的托管并行度的接口。

JniIdentityHashCode

返回包装实例的值 java.lang.System.identityHashCode()

(继承自 IJavaPeerable)
JniManagedPeerState

托管对等方的状态。

(继承自 IJavaPeerable)
JniPeerMembers

成员访问和调用支持。

(继承自 IJavaPeerable)
PeerReference

返回JniObjectReference包装的Java对象实例。

(继承自 IJavaPeerable)

方法

名称 说明
Block()

可能会阻止当前线程,例如等待锁或条件。

Disposed()

在释放实例时调用。

(继承自 IJavaPeerable)
DisposeUnlessReferenced()

如果没有对此实例的未完成引用,则调用 Dispose();否则不执行任何操作。

(继承自 IJavaPeerable)
Finalized()

在实例完成时调用。

(继承自 IJavaPeerable)
SetJniIdentityHashCode(Int32)

设置由 JniIdentityHashCode. 返回的值。

(继承自 IJavaPeerable)
SetJniManagedPeerState(JniManagedPeerStates)

用于扩展在 s 中 ForkJoinPool运行的任务的托管并行度的接口。

(继承自 IJavaPeerable)
SetPeerReference(JniObjectReference)

设置由 PeerReference. 返回的值。

(继承自 IJavaPeerable)
UnregisterFromRuntime()

取消注册此实例,使运行时不会从将来 Java.Interop.JniRuntime+JniValueManager.PeekValue 的调用中返回它。

(继承自 IJavaPeerable)

扩展方法

名称 说明
GetJniTypeName(IJavaPeerable)

获取实例 self类型的 JNI 名称。

JavaAs<TResult>(IJavaPeerable)

尝试强制self键入TResult,检查强制是否在Java端有效。

JavaCast<TResult>(IJavaObject)

执行 Android 运行时检查的类型转换。

JavaCast<TResult>(IJavaObject)

用于扩展在 s 中 ForkJoinPool运行的任务的托管并行度的接口。

TryJavaCast<TResult>(IJavaPeerable, TResult)

尝试强制self键入TResult,检查强制是否在Java端有效。

适用于