ForkJoinPool.IManagedBlocker Интерфейс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Интерфейс расширения управляемого параллелизма для задач, выполняемых в ForkJoinPool
s.
[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
s.
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 |
Интерфейс расширения управляемого параллелизма для задач, выполняемых в |
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) |
Интерфейс расширения управляемого параллелизма для задач, выполняемых в |