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.util.concurrent.ForkJoinPool.ManagedBlockerJava 文档

本页的某些部分是根据 Android 开放源代码项目创建和共享的工作进行的修改,并根据 Creative Commons 2.5 属性许可证中所述的术语使用。

属性

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)

扩展方法

JavaCast<TResult>(IJavaObject)

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

JavaCast<TResult>(IJavaObject)

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

GetJniTypeName(IJavaPeerable)

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

适用于