ReentrantLock Класс
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Повторное взаимное исключение Lock с тем же базовым поведением и семантикой, что и неявный монитор блокировки, доступ к которым осуществляется с помощью synchronized методов и инструкций, но с расширенными возможностями.
[Android.Runtime.Register("java/util/concurrent/locks/ReentrantLock", DoNotGenerateAcw=true)]
public class ReentrantLock : Java.Lang.Object, IDisposable, Java.IO.ISerializable, Java.Util.Concurrent.Locks.ILock
[<Android.Runtime.Register("java/util/concurrent/locks/ReentrantLock", DoNotGenerateAcw=true)>]
type ReentrantLock = class
inherit Object
interface ISerializable
interface IJavaObject
interface IDisposable
interface IJavaPeerable
interface ILock
- Наследование
- Атрибуты
- Реализации
Комментарии
Повторное взаимное исключение Lock с тем же базовым поведением и семантикой, что и неявный монитор блокировки, доступ к которым осуществляется с помощью synchronized методов и инструкций, но с расширенными возможностями.
ReentrantLock
<A > является владельцем< или em> потоком последней успешной блокировки, но еще не разблокирован. Вызов потока lock возвращается, успешно получив блокировку, когда блокировка не принадлежит другому потоку. Метод возвращается немедленно, если текущий поток уже владеет блокировкой. Это можно проверить с помощью методов #isHeldByCurrentThreadи #getHoldCount.
Конструктор этого класса принимает необязательный <>параметр em fairness</em>. Если задано true, то блоки предпочитают предоставлять доступ к самому длинному потоку ожидания. В противном случае эта блокировка не гарантирует какой-либо определенный порядок доступа. Программы, использующие справедливые блокировки, к которым обращаются многие потоки, могут отображать более низкую общую пропускную способность (т. е. медленнее; часто гораздо медленнее), чем те, которые используют параметр по умолчанию, но имеют меньшие дисперсии в разы, чтобы получить блокировки и гарантировать отсутствие голода. Однако обратите внимание, что справедливость блокировок не гарантирует справедливость планирования потоков. Таким образом, один из многих потоков с использованием справедливой блокировки может получить его несколько раз в последовательности, в то время как другие активные потоки не выполняются и в настоящее время не удерживают блокировку. Кроме того, обратите внимание, что метод без времени #tryLock() не учитывает параметр справедливости. Это приведет к успешному успеху, если блокировка доступна, даже если другие потоки ожидают.
Рекомендуется <>сразу же следовать вызову < блока > в em alwayslock/emtry, как правило, в до/после строительства, например:
{@code
class X {
private final ReentrantLock lock = new ReentrantLock();
// ...
public void m() {
lock.lock(); // block until condition holds
try {
// ... method body
} finally {
lock.unlock();
}
}
}}
Помимо реализации Lock интерфейса, этот класс определяет ряд publicprotected методов для проверки состояния блокировки. Некоторые из этих методов полезны только для инструментирования и мониторинга.
Сериализация этого класса ведет себя так же, как и встроенные блокировки: десериализированная блокировка находится в разблокированном состоянии независимо от его состояния при сериализации.
Эта блокировка поддерживает не более 2147483647 рекурсивных блокировок в одном потоке. Попытки превышения этого предела приводят к Error возникновению вызовов методов блокировки.
Добавлено в версии 1.5.
Java документации по java.util.concurrent.locks.ReentrantLock.
Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".
Конструкторы
| Имя | Описание |
|---|---|
| ReentrantLock() |
Создает экземпляр . |
| ReentrantLock(Boolean) |
Создает экземпляр |
| ReentrantLock(IntPtr, JniHandleOwnership) |
Конструктор, используемый при создании управляемых представлений объектов JNI; вызывается средой выполнения. |
Свойства
| Имя | Описание |
|---|---|
| Class |
Возвращает класс среды выполнения этого |
| Handle |
Дескриптор базового экземпляра Android. (Унаследовано от Object) |
| HasQueuedThreads |
Запрашивает, ожидают ли потоки получить эту блокировку. |
| HoldCount |
Запрашивает количество удержаний в этой блокировке текущим потоком. |
| IsFair |
Возвращает значение |
| IsHeldByCurrentThread |
Запросы, если эта блокировка хранится текущим потоком. |
| IsLocked |
Запросы, если эта блокировка хранится любым потоком. |
| JniIdentityHashCode |
Возвращает хэш-код удостоверения, назначенный этому Java одноранговой среде выполнения взаимодействия. (Унаследовано от Object) |
| JniManagedPeerState |
Повторное взаимное исключение |
| JniPeerMembers |
Возвращает метаданные JNI, используемые для вызова элементов этого Java однорангового узла. |
| Owner |
Возвращает поток, который в настоящее время владеет этой блокировкой или |
| PeerReference |
Возвращает ссылку на объект JNI для этого Java однорангового узла. (Унаследовано от Object) |
| QueuedThreads |
Возвращает коллекцию, содержащую потоки, которые могут ожидать получения этой блокировки. |
| QueueLength |
Возвращает оценку количества потоков, ожидающих получения этой блокировки. |
| ThresholdClass |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. |
| ThresholdType |
Этот API поддерживает инфраструктуру Mono для Android и не предназначен для использования непосредственно из кода. |
Методы
| Имя | Описание |
|---|---|
| Clone() |
Создает и возвращает копию этого объекта. (Унаследовано от Object) |
| Construct(JniObjectReference, JniObjectReferenceOptions) |
Повторное взаимное исключение |
| Dispose() |
Освобождает ресурсы, удерживаемые этим Java одноранговым узлом. (Унаследовано от Object) |
| Dispose(Boolean) |
Освобождает ресурсы, удерживаемые этим Java одноранговым узлом. (Унаследовано от Object) |
| DisposeUnlessReferenced() |
Повторное взаимное исключение |
| Equals(Object) |
Повторное взаимное исключение |
| Equals(Object) |
Указывает, равен ли другой объект этому объекту. (Унаследовано от Object) |
| GetHashCode() |
Возвращает хэш-значение кода для объекта. (Унаследовано от Object) |
| GetWaitingThreads(ICondition) |
Возвращает коллекцию, содержащую те потоки, которые могут ожидать заданного условия, связанного с этой блокировкой. |
| GetWaitQueueLength(ICondition) |
Возвращает оценку количества потоков, ожидающих заданного условия, связанного с этой блокировкой. |
| HasQueuedThread(Thread) |
Запрашивает, ожидает ли данный поток получения этой блокировки. |
| HasWaiters(ICondition) |
Запрашивает, ожидают ли потоки заданного условия, связанного с этой блокировкой. |
| JavaFinalize() |
Вызывается сборщиком мусора в объекте, когда сборка мусора определяет, что больше ссылок на объект нет. (Унаследовано от Object) |
| Lock() |
Получает блокировку. |
| LockInterruptibly() |
Получает блокировку, если текущий поток не прерван потоком# прерывания. |
| NewCondition() |
Возвращает экземпляр для использования с этим |
| Notify() |
Просыпается один поток, ожидающий монитора этого объекта. (Унаследовано от Object) |
| NotifyAll() |
Просыпает все потоки, ожидающие монитора этого объекта. (Унаследовано от Object) |
| SetHandle(IntPtr, JniHandleOwnership) |
Задает свойство Handle. (Унаследовано от Object) |
| SetPeerReference(JniObjectReference, JniObjectReferenceOptions) |
Повторное взаимное исключение |
| ToArray<T>() |
Создает управляемый массив из этого Java оболочки массива. (Унаследовано от Object) |
| ToString() |
Возвращает строковое представление объекта. (Унаследовано от Object) |
| TryLock() |
Получает блокировку, только если она не удерживается другим потоком во время вызова. |
| TryLock(Int64, TimeUnit) |
Получает блокировку, если она не удерживается другим потоком в течение заданного времени ожидания, и текущий поток не был прерван потоком# прерывания. |
| Unlock() |
Пытается освободить эту блокировку. |
| UnregisterFromRuntime() |
Отменяет регистрацию этого Java однорангового узла из среды выполнения взаимодействия. (Унаследовано от Object) |
| Wait() |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, путем <><уведомления/>em или <эм>прерванного</em.> (Унаследовано от Object) |
| Wait(Int64, Int32) |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени. (Унаследовано от Object) |
| Wait(Int64) |
Приводит к тому, что текущий поток будет ждать, пока он не проснется, как правило, при <>получении уведомления</>em или <>эм прерваны< или> до тех пор, пока не истекло определенное количество реального времени. (Унаследовано от Object) |
Явные реализации интерфейса
| Имя | Описание |
|---|---|
| IJavaPeerable.Disposed() |
Повторное взаимное исключение |
| IJavaPeerable.Finalized() |
Повторное взаимное исключение |
| IJavaPeerable.JniObjectReferenceControlBlock |
Повторное взаимное исключение |
| IJavaPeerable.SetJniIdentityHashCode(Int32) |
Повторное взаимное исключение |
| IJavaPeerable.SetJniManagedPeerState(JniManagedPeerStates) |
Повторное взаимное исключение |
| IJavaPeerable.SetPeerReference(JniObjectReference) |
Повторное взаимное исключение |
| IJavaPeerable.UnregisterFromRuntime() |
Повторное взаимное исключение |
Методы расширения
| Имя | Описание |
|---|---|
| GetJniTypeName(IJavaPeerable) |
Возвращает имя JNI типа экземпляра |
| JavaAs<TResult>(IJavaPeerable) |
Попробуйте принуждать к типу |
| JavaCast<TResult>(IJavaObject) |
Выполняет преобразование типа, проверяемого средой выполнения Android. |
| JavaCast<TResult>(IJavaObject) |
Повторное взаимное исключение |
| TryJavaCast<TResult>(IJavaPeerable, TResult) |
Попробуйте принуждать к типу |