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
. Если время меньше нуля или равно нулю, метод не будет ждать вообще.
В этой реализации, так как этот метод является явной точкой прерывания, предпочтение отдается реагированию на прерывание при обычном или повторном приобретении блокировки, а также по истечении времени ожидания.
Части этой страницы — это изменения на основе работы, созданной и общей проектом с открытым исходным кодом Android и используемой в соответствии с условиями, описанными в лицензии Creative Commons 2.5 Attribution.