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.
Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".
Конструкторы
| Имя. | Описание |
|---|---|
| LockSupport(IntPtr, JniHandleOwnership) |
Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения. |
Свойства
| Имя. | Описание |
|---|---|
| Class |
Возвращает класс среды выполнения этого |
| Handle |
Дескриптор базового экземпляра Android. (Унаследовано от Object) |
| JniIdentityHashCode |
Возвращает хэш-код удостоверения, назначенный этому Java одноранговой среде выполнения взаимодействия. (Унаследовано от Object) |
| JniManagedPeerState |
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации. (Унаследовано от JavaObject) |
| JniPeerMembers |
Возвращает метаданные JNI, используемые для вызова элементов этого Java однорангового узла. |
| PeerReference |
Возвращает ссылку на объект JNI для этого Java однорангового узла. (Унаследовано от Object) |
| ThresholdClass |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. |
| ThresholdType |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. |
Методы
| Имя. | Описание |
|---|---|
| Clone() |
Создает и возвращает копию этого объекта. (Унаследовано от Object) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации. (Унаследовано от JavaObject) |
| Dispose() |
Освобождает ресурсы, удерживаемые этим Java одноранговым узлом. (Унаследовано от Object) |
| Dispose(Boolean) |
Освобождает ресурсы, удерживаемые этим Java одноранговым узлом. (Унаследовано от Object) |
| DisposeUnlessReferenced() |
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации. (Унаследовано от JavaObject) |
| Equals(Object) |
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации. (Унаследовано от JavaObject) |
| 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) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации. (Унаследовано от JavaObject) |
| ToArray<T>() |
Создает управляемый массив из этого Java оболочки массива. (Унаследовано от Object) |
| ToString() |
Возвращает строковое представление объекта. (Унаследовано от Object) |
| Unpark(Thread) |
Предоставляет разрешение для данного потока, если оно еще не доступно. |
| UnregisterFromRuntime() |
Отменяет регистрацию этого Java однорангового узла из среды выполнения взаимодействия. (Унаследовано от Object) |
| Wait() |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, путем <><уведомления/>em или <эм>прерванного</em.> (Унаследовано от Object) |
| Wait(Int64, Int32) |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени. (Унаследовано от Object) |
| Wait(Int64) |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени. (Унаследовано от Object) |
Явные реализации интерфейса
| Имя. | Описание |
|---|---|
| IJavaPeerable.Disposed() |
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации. (Унаследовано от JavaObject) |
| IJavaPeerable.Finalized() |
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации. (Унаследовано от JavaObject) |
| IJavaPeerable.JniObjectReferenceControlBlock |
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации. (Унаследовано от JavaObject) |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации. (Унаследовано от JavaObject) |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации. (Унаследовано от JavaObject) |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации. (Унаследовано от JavaObject) |
Методы расширения
| Имя. | Описание |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Возвращает имя JNI типа экземпляра |
| JavaAs<TResult>(IJavaPeerable) |
Попробуйте принуждать к типу |
| JavaCast<TResult>(IJavaObject) |
Выполняет преобразование типа, проверяемого средой выполнения Android. |
| JavaCast<TResult>(IJavaObject) |
Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации. |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Попробуйте принуждать к типу |