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


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
Наследование
LockSupport
Атрибуты

Комментарии

Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации.

Этот класс связывается с каждым потоком, использующим его, разрешением (в смысле 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

Возвращает класс среды выполнения этого Objectобъекта.

(Унаследовано от Object)
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)

Задает объект, возвращаемый вызовами текущего #getBlocker getBlocker потока.

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)

Базовые примитивы блокирующих потоков для создания блокировок и других классов синхронизации.

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