Поделиться через


ForkJoinPool.IManagedBlocker Интерфейс

Определение

Интерфейс расширения управляемого параллелизма для задач, выполняемых в ForkJoinPools.

[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
Атрибуты
Реализации

Комментарии

Интерфейс расширения управляемого параллелизма для задач, выполняемых в ForkJoinPools.

A ManagedBlocker предоставляет два метода. Метод #isReleasable должен возвращать, true если блокировка не требуется. Метод #block блокирует текущий поток при необходимости (возможно, внутренний вызов перед фактической блокировкой isReleasable ). Эти действия выполняются вызовом любого потока ForkJoinPool#managedBlock(ManagedBlocker). Необычные методы в этом API размещают синхронизаторы, которые могут, но обычно не блокируются в течение длительных периодов. Аналогичным образом они позволяют более эффективно обрабатывать внутренние случаи, в которых могут быть дополнительные работники, но обычно не необходимы, чтобы обеспечить достаточный параллелизм. К этому концу реализации метода isReleasable должны быть доступны для повторяющегося вызова. Ни метод не вызывается после предыдущего isReleasable вызова или block возврата true.

Например, здесь используется ManagedBlocker на основе ReentrantLock:

{@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 и используемой в соответствии с условиями, описанными в лицензии Creative Commons 2.5 Attribution.

Свойства

Handle

Возвращает значение JNI базового объекта Android.

(Унаследовано от IJavaObject)
IsReleasable

Интерфейс расширения управляемого параллелизма для задач, выполняемых в ForkJoinPools.

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)

Интерфейс расширения управляемого параллелизма для задач, выполняемых в ForkJoinPools.

(Унаследовано от IJavaPeerable)
SetPeerReference(JniObjectReference)

Задайте значение, возвращаемое PeerReference.

(Унаследовано от IJavaPeerable)
UnregisterFromRuntime()

Отмените регистрацию этого экземпляра, чтобы среда выполнения не возвращала ее из будущих Java.Interop.JniRuntime+JniValueManager.PeekValue вызовов.

(Унаследовано от IJavaPeerable)

Методы расширения

JavaCast<TResult>(IJavaObject)

Выполняет преобразование типа, проверяемого средой выполнения Android.

JavaCast<TResult>(IJavaObject)

Интерфейс расширения управляемого параллелизма для задач, выполняемых в ForkJoinPools.

GetJniTypeName(IJavaPeerable)

Интерфейс расширения управляемого параллелизма для задач, выполняемых в ForkJoinPools.

Применяется к