Язык

ICondition.AwaitUntil(Date) Метод

Определение

Вызывает ожидание текущего потока, пока он не будет сигнален или прерван, или указанный крайний срок истекает.

[Android.Runtime.Register("awaitUntil", "(Ljava/util/Date;)Z", "GetAwaitUntil_Ljava_util_Date_Handler:Java.Util.Concurrent.Locks.IConditionInvoker, Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null")]
public bool AwaitUntil(Java.Util.Date? deadline);
[<Android.Runtime.Register("awaitUntil", "(Ljava/util/Date;)Z", "GetAwaitUntil_Ljava_util_Date_Handler:Java.Util.Concurrent.Locks.IConditionInvoker, Mono.Android, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null")>]
abstract member AwaitUntil : Java.Util.Date -> bool

Параметры

deadline
Date

абсолютное время ожидания

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

false Если крайний срок истек по возвращении, в противном случае true

Атрибуты

Исключения

Значение , если текущий поток прерван (и поддерживается прерывание приостановки потока)

Комментарии

Вызывает ожидание текущего потока, пока он не будет сигнален или прерван, или указанный крайний срок истекает.

Блокировка, связанная с этим условием, атомарно освобождается, и текущий поток становится отключенным для целей планирования потоков и находится в состоянии спячки до тех пор, пока <em one>/em<> из пяти вещей произойдет: <ul><li li Некоторые другие потоки вызывают > метод для этого#signal, и текущий поток будет выбран в качестве потока для пробуждения; или Conditionли другой поток вызывает < метод для этого>; или li#signalAllCondition<>Некоторые другие потоки#прерывания прерывают текущий поток, и поддерживается прерывание приостановки потока; или <li>Указанный крайний срок истекает; или <li>A "<>возникает спровождительное пробуждение</em>" . </ul>

Во всех случаях, прежде чем этот метод сможет вернуть текущий поток, необходимо повторно получить блокировку, связанную с этим условием. Когда поток возвращает его, <>он гарантируется</em> для удержания этой блокировки.

Если текущий поток: <ul><li>имеет свой прерванный статус при входе в этот метод; или <ли>является Thread#прерывание при ожидании и прерывании приостановки потока поддерживается, /ul<, а > затем возникает исключение и InterruptedExceptionсостояние прерывания текущего потока очищается. В первом случае не указано, возникает ли проверка прерывания перед освобождением блокировки.

Возвращаемое значение указывает, истек ли крайний срок, который можно использовать следующим образом:

{@code
            boolean aMethod(Date deadline)
                throws InterruptedException {
              boolean stillWaiting = true;
              lock.lock();
              try {
                while (!conditionBeingWaitedFor()) {
                  if (!stillWaiting)
                    return false;
                  stillWaiting = theCondition.awaitUntil(deadline);
                }
                // ...
                return true;
              } finally {
                lock.unlock();
              }
            }}

<Рекомендации> по реализации b</b>

Предполагается, что текущий поток удерживает блокировку, связанную с этим Condition при вызове этого метода. Это зависит от реализации, чтобы определить, является ли это делом и если нет, как реагировать. Как правило, создается исключение (например IllegalMonitorStateException), и реализация должна документировать этот факт.

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

Java документации по java.util.concurrent.locks.Condition.awaitUntil(java.util.Date).

Части этой страницы — это изменения на основе работы, созданной и общей Project и используемых в соответствии с условиями, описанными в разделе "".

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