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 |
Интерфейс расширения управляемого параллелизма для задач, выполняемых в |
| 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) |
Интерфейс расширения управляемого параллелизма для задач, выполняемых в |