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 и используемых в соответствии с условиями, описанными в разделе "".