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


ReentrantReadWriteLock.ReentrantWriteLock.TryLock Метод

Определение

Перегрузки

TryLock()

Получает блокировку записи, только если она не удерживается другим потоком во время вызова.

TryLock(Int64, TimeUnit)

Получает блокировку записи, если она не удерживается другим потоком в течение заданного времени ожидания, и текущий поток не был прерван потоком#прерывания.

TryLock()

Получает блокировку записи, только если она не удерживается другим потоком во время вызова.

[Android.Runtime.Register("tryLock", "()Z", "GetTryLockHandler")]
public virtual bool TryLock ();
[<Android.Runtime.Register("tryLock", "()Z", "GetTryLockHandler")>]
abstract member TryLock : unit -> bool
override this.TryLock : unit -> bool

Возвращаемое значение

true Значение , если блокировка была свободна и была приобретена текущим потоком, или блокировка записи уже была проведена текущим потоком; и в false противном случае.

Реализации

Атрибуты

Комментарии

Получает блокировку записи, только если она не удерживается другим потоком во время вызова.

Получает блокировку записи, если ни чтение, ни блокировка записи не удерживаются другим потоком и возвращается немедленно со значением true, задав счетчик удержания блокировки записи на один. Даже если эта блокировка была установлена для использования политики справедливого порядка, вызов tryLock()<em></em> немедленно получает блокировку, если она доступна, независимо от того, ожидают ли другие потоки блокировки записи. Это " barging" поведение может быть полезно в определенных обстоятельствах, даже если он нарушает справедливость. Если вы хотите учитывать параметр справедливости для этой блокировки, используйте #tryLock(long, TimeUnit) tryLock(0, TimeUnit.SECONDS) его почти эквивалентно (оно также обнаруживает прерывание).

Если текущий поток уже содержит эту блокировку, число удержаний увеличивается по одному, а метод возвращает true.

Если блокировка удерживается другим потоком, этот метод возвращается немедленно со значением false.

Документация по Java для java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock.tryLock().

Части этой страницы — это изменения на основе работы, созданной и общей проектом с открытым исходным кодом Android и используемой в соответствии с условиями, описанными в лицензии Creative Commons 2.5 Attribution.

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

TryLock(Int64, TimeUnit)

Получает блокировку записи, если она не удерживается другим потоком в течение заданного времени ожидания, и текущий поток не был прерван потоком#прерывания.

[Android.Runtime.Register("tryLock", "(JLjava/util/concurrent/TimeUnit;)Z", "GetTryLock_JLjava_util_concurrent_TimeUnit_Handler")]
public virtual bool TryLock (long timeout, Java.Util.Concurrent.TimeUnit? unit);
[<Android.Runtime.Register("tryLock", "(JLjava/util/concurrent/TimeUnit;)Z", "GetTryLock_JLjava_util_concurrent_TimeUnit_Handler")>]
abstract member TryLock : int64 * Java.Util.Concurrent.TimeUnit -> bool
override this.TryLock : int64 * Java.Util.Concurrent.TimeUnit -> bool

Параметры

timeout
Int64

время ожидания блокировки записи

unit
TimeUnit

единица времени аргумента времени ожидания

Возвращаемое значение

true Значение , если блокировка была свободна и была приобретена текущим потоком, или блокировка записи уже была проведена текущим потоком; и false если время ожидания истекло до получения блокировки.

Реализации

Атрибуты

Исключения

Если текущий поток прерван

Значение NULL, если единица времени имеет значение NULL

Комментарии

Получает блокировку записи, если она не удерживается другим потоком в течение заданного времени ожидания, и текущий поток не был прерван потоком#прерывания.

Получает блокировку записи, если ни чтение, ни блокировка записи не удерживаются другим потоком и возвращается немедленно со значением true, задав счетчик удержания блокировки записи на один. Если эта блокировка была задана для использования политики справедливого порядка, доступная блокировка <>em не< будет получена,> если другие потоки ожидают блокировки записи. Это отличается от #tryLock() метода. Если вы хотите, чтобы время tryLock , позволяющее баргировать на справедливой блокировке, объедините время и незапланированные формы вместе:

{@code
            if (lock.tryLock() ||
                lock.tryLock(timeout, unit)) {
              ...
            }}

Если текущий поток уже содержит эту блокировку, число удержаний увеличивается по одному, а метод возвращает true.

Если блокировка удерживается другим потоком, текущий поток становится отключенным для целей планирования потоков и находится в неактивном состоянии до тех пор, пока не произойдет одно из трех действий:

<ul>

<li>Блокировка записи приобретается текущим потоком; или

<li>Некоторые другие потоки#прерывание прерывает текущий поток; или

<li>Указанное время ожидания истекает

</ul>

Если блокировка записи получена, возвращается значение true , а количество удержаний блокировки записи — одно.

Если текущий поток:

<ul>

<li>имеет свой прерванный набор состояний при входе в этот метод; или

<li>— Thread#прерывание при получении блокировки записи;

</ul>

Затем InterruptedException возникает и состояние прерванного текущего потока очищается.

Если указанное время ожидания истекает, возвращается значение false . Если время меньше нуля или равно нулю, метод не будет ждать вообще.

В этой реализации, так как этот метод является явной точкой прерывания, предпочтение отдается реагированию на прерывание при обычном или повторном приобретении блокировки, а также по истечении времени ожидания.

Документация по Java для java.util.concurrent.locks.ReentrantReadWriteLock.WriteLock.tryLock(long, java.util.concurrent.TimeUnit).

Части этой страницы — это изменения на основе работы, созданной и общей проектом с открытым исходным кодом Android и используемой в соответствии с условиями, описанными в лицензии Creative Commons 2.5 Attribution.

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