ReentrantLock.TryLock Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Перегрузки
| Имя | Описание |
|---|---|
| TryLock(Int64, TimeUnit) |
Получает блокировку, если она не удерживается другим потоком в течение заданного времени ожидания, и текущий поток не был прерван потоком# прерывания. |
| TryLock() |
Получает блокировку, только если она не удерживается другим потоком во время вызова. |
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.
Если блокировка удерживается другим потоком, текущий поток становится отключенным для целей планирования потоков и находится в неактивном состоянии до тех пор, пока не произойдет одно из трех действий:
<Ул>
<li>Блокировка приобретается текущим потоком; или
<li>Некоторые другие потоки#прерывание прерывает текущий поток; или
<li>Указанное время ожидания истекает
</ul>
Если блокировка получена, возвращается значение true , а число удержаний блокировки — одно.
Если текущий поток:
<Ул>
<li>имеет свой прерванный набор состояний при входе в этот метод; или
<li>— Thread#прерывание при получении блокировки.
<Затем > возникает исключение /ulInterruptedException, и состояние прерванного текущего потока очищается.
Если указанное время ожидания истекает, возвращается значение false . Если время меньше нуля или равно нулю, метод не будет ждать вообще.
В этой реализации, так как этот метод является явной точкой прерывания, предпочтение отдается реагированию на прерывание при обычном или повторном приобретении блокировки, а также по истечении времени ожидания.
Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".
Применяется к
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.ReentrantLock.tryLock().
Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".