LockSupport Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации.
[Android.Runtime.Register("java/util/concurrent/locks/LockSupport", DoNotGenerateAcw=true)]
public class LockSupport : Java.Lang.Object
[<Android.Runtime.Register("java/util/concurrent/locks/LockSupport", DoNotGenerateAcw=true)>]
type LockSupport = class
inherit Object
- Наследование
- Атрибуты
Комментарии
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации.
Этот класс связывается с каждым потоком, использующим его, разрешением (в смысле java.util.concurrent.Semaphore Semaphore
класса). Вызовpark
, который возвращается немедленно, если разрешение доступно, потребляя его в процессе; в противном случае он>< может</em> блокировать. Вызов, позволяющий unpark
сделать разрешение доступным, если он еще недоступен. (В отличие от Семафора, однако, разрешения не накапливаются. Существует не более одного.) Для надежного использования требуется использование переменных переменных (или атомарных) для управления припарковкой или разпарковкой. Порядок вызовов этих методов поддерживается в отношении переменных переменных, но не обязательно не изменяющихся переменных доступа.
Методы park
и unpark
предоставление эффективных средств блокировки и разблокировки потоков, которые не сталкиваются с проблемами, которые вызывают устаревшие методы Thread.suspend
и Thread.resume
не могут использоваться в таких целях: Гонки между одним вызовом park
потока и другим потоком, пытающимся сохранить unpark
динамическую жизнь, из-за разрешения. Кроме того, возвращается, park
если поток вызывающего абонента был прерван и поддерживаются версии времени ожидания. Метод park
также может возвращаться в любое другое время по "без причины", поэтому в целом необходимо вызвать в цикле, который повторно выполняет проверку условий при возврате. В этом смысле park
является оптимизацией "занятого ожидания", который не тратит столько времени спиннинга, но должен быть сопряжен с unpark
эффективным.
Три формы park
каждого из них также поддерживают blocker
параметр объекта. Этот объект записывается, когда поток блокируется, чтобы разрешить мониторинг и диагностические средства определить причины блокировки потоков. (Такие средства могут получить доступ к блокировщикам с помощью метода #getBlocker(Thread)
.) Использование этих форм, а не исходных форм без этого параметра, настоятельно рекомендуется. Обычный аргумент для предоставления в рамках blocker
реализации this
блокировки.
Эти методы предназначены для использования в качестве инструментов для создания служебных программ синхронизации более высокого уровня и не являются сами по себе полезными для большинства приложений управления параллелизмом. Этот park
метод предназначен для использования только в конструкциях формы:
{@code
while (!canProceed()) {
// ensure request to unpark is visible to other threads
...
LockSupport.park(this);
}}
Если действия потока, публикующего запрос, не будут выполняться до вызова park
, влечет за собой блокировку или блокировку. Так как только одно разрешение связано с каждым потоком, любое промежуточное использование park
, включая неявное использование через загрузку класса, может привести к неответственному потоку ("потерянный непарк").
<b>Пример использования.</b> Вот эскиз класса блокировки first-in-out, отличного от повторного ввода:
{@code
class FIFOMutex {
private final AtomicBoolean locked = new AtomicBoolean(false);
private final Queue<Thread> waiters
= new ConcurrentLinkedQueue<>();
public void lock() {
boolean wasInterrupted = false;
// publish current thread for unparkers
waiters.add(Thread.currentThread());
// Block while not first in queue or cannot acquire lock
while (waiters.peek() != Thread.currentThread() ||
!locked.compareAndSet(false, true)) {
LockSupport.park(this);
// ignore interrupts while waiting
if (Thread.interrupted())
wasInterrupted = true;
}
waiters.remove();
// ensure correct interrupt status on return
if (wasInterrupted)
Thread.currentThread().interrupt();
}
public void unlock() {
locked.set(false);
LockSupport.unpark(waiters.peek());
}
static {
// Reduce the risk of "lost unpark" due to classloading
Class<?> ensureLoaded = LockSupport.class;
}
}}
Добавлено в версии 1.5.
Документация по Java для java.util.concurrent.locks.LockSupport
.
Части этой страницы — это изменения на основе работы, созданной и общей проектом с открытым исходным кодом Android и используемой в соответствии с условиями, описанными в лицензии Creative Commons 2.5 Attribution.
Конструкторы
LockSupport(IntPtr, JniHandleOwnership) |
Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения. |
Свойства
Class |
Возвращает класс среды выполнения этого |
Handle |
Дескриптор базового экземпляра Android. (Унаследовано от Object) |
JniIdentityHashCode |
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации. (Унаследовано от Object) |
JniPeerMembers |
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации. |
PeerReference |
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации. (Унаследовано от Object) |
ThresholdClass |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. |
ThresholdType |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. |
Методы
Clone() |
Создает и возвращает копию этого объекта. (Унаследовано от Object) |
Dispose() |
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации. (Унаследовано от Object) |
Dispose(Boolean) |
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации. (Унаследовано от Object) |
Equals(Object) |
Указывает, равен ли другой объект этому объекту. (Унаследовано от Object) |
GetBlocker(Thread) |
Возвращает объект блокировщика, предоставленный последнему вызову метода парка, который еще не разблокировал или null, если не заблокирован. |
GetHashCode() |
Возвращает значение хэш-кода для объекта. (Унаследовано от Object) |
JavaFinalize() |
Вызывается сборщиком мусора в объекте, когда сборка мусора определяет, что больше ссылок на объект нет. (Унаследовано от Object) |
Notify() |
Пробуждение одного потока, ожидающего монитора этого объекта. (Унаследовано от Object) |
NotifyAll() |
Просыпает все потоки, ожидающие монитора этого объекта. (Унаследовано от Object) |
Park() |
Отключает текущий поток для целей планирования потоков, если разрешение не доступно. |
Park(Object) |
Отключает текущий поток для целей планирования потоков, если разрешение не доступно. |
ParkNanos(Int64) |
Отключает текущий поток для целей планирования потоков до указанного времени ожидания, если разрешение не доступно. |
ParkNanos(Object, Int64) |
Отключает текущий поток для целей планирования потоков до указанного времени ожидания, если разрешение не доступно. |
ParkUntil(Int64) |
Отключает текущий поток для целей планирования потоков до указанного крайнего срока, если разрешение не доступно. |
ParkUntil(Object, Int64) |
Отключает текущий поток для целей планирования потоков до указанного крайнего срока, если разрешение не доступно. |
SetCurrentBlocker(Object) |
Задает объект, возвращаемый вызовами текущего |
SetHandle(IntPtr, JniHandleOwnership) |
Задает свойство Handle. (Унаследовано от Object) |
ToArray<T>() |
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации. (Унаследовано от Object) |
ToString() |
Возвращает строковое представление объекта. (Унаследовано от Object) |
Unpark(Thread) |
Предоставляет разрешение для данного потока, если оно еще не доступно. |
UnregisterFromRuntime() |
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации. (Унаследовано от Object) |
Wait() |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>помощи уведомления</em> или <эм>прерванного</em>. (Унаследовано от Object) |
Wait(Int64, Int32) |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прервано< или> до тех пор, пока не истекло определенное количество реального времени. (Унаследовано от Object) |
Wait(Int64) |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прервано< или> до тех пор, пока не истекло определенное количество реального времени. (Унаследовано от Object) |
Явные реализации интерфейса
IJavaPeerable.Disposed() |
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации. (Унаследовано от Object) |
IJavaPeerable.DisposeUnlessReferenced() |
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации. (Унаследовано от Object) |
IJavaPeerable.Finalized() |
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации. (Унаследовано от Object) |
IJavaPeerable.JniManagedPeerState |
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации. (Унаследовано от Object) |
IJavaPeerable.SetJniIdentityHashCode(Int32) |
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации. (Унаследовано от Object) |
IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации. (Унаследовано от Object) |
IJavaPeerable.SetPeerReference(JniObjectReference) |
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации. (Унаследовано от Object) |
Методы расширения
JavaCast<TResult>(IJavaObject) |
Выполняет преобразование типа, проверяемого средой выполнения Android. |
JavaCast<TResult>(IJavaObject) |
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации. |
GetJniTypeName(IJavaPeerable) |
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации. |