Object.Wait Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
Перегрузки
Wait() |
Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления/><em> или <прерывания></em>. |
Wait(Int64, Int32) |
Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления</>em>, <>прерывания< или> em, либо до истечения определенного количества реального времени. |
Wait(Int64) |
Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления</>em>, <>прерывания< или> em, либо до истечения определенного количества реального времени. |
Wait()
Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления/><em> или <прерывания></em>.
[Android.Runtime.Register("wait", "()V", "")]
public void Wait ();
[<Android.Runtime.Register("wait", "()V", "")>]
member this.Wait : unit -> unit
- Атрибуты
Исключения
Значение , если поток, вызывающий этот метод, не является владельцем монитора этого объекта.
Значение , если текущий поток был прерван. Состояние прерванного текущего потока будет очищено до возникновения исключения.
Комментарии
Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления/><em> или <прерывания></em>.
Во всех отношениях этот метод ведет себя так, как если бы wait(0L, 0)
он был вызван. Дополнительные сведения см. в спецификации #wait(long, int)
метода .
Документация по Java для java.lang.Object.wait()
.
Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License Creative Commons 2.5 Attribution License.
См. также раздел
- Notify()
- NotifyAll()
- Wait(Int64)
- <xref:Java.Lang.Object.Wait(System.Int64%2c+System.Int32)>
- Thread
Применяется к
Wait(Int64, Int32)
Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления</>em>, <>прерывания< или> em, либо до истечения определенного количества реального времени.
[Android.Runtime.Register("wait", "(JI)V", "")]
public void Wait (long timeoutMillis, int nanos);
[<Android.Runtime.Register("wait", "(JI)V", "")>]
member this.Wait : int64 * int -> unit
Параметры
- timeoutMillis
- Int64
максимальное время ожидания в миллисекундах
- nanos
- Int32
дополнительное время в наносекундах в диапазоне от 0 до 9999999 включительно
- Атрибуты
Исключения
Значение , nanos
или nanos >
999999
millis
.
Значение , если поток, вызывающий этот метод, не является владельцем монитора этого объекта.
Значение , если текущий поток был прерван. Состояние прерванного текущего потока будет очищено до возникновения исключения.
Комментарии
Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления</>em>, <>прерывания< или> em, либо до истечения определенного количества реального времени.
Текущий поток должен владеть блокировкой монитора этого объекта. #notify notify
Описание способов, с помощью которых поток может стать владельцем блокировки монитора, см. в этом методе.
Этот метод заставляет текущий поток (здесь называемый <var>T</var>) поместить себя в набор ожидания для этого объекта, а затем отказаться от всех утверждений синхронизации для этого объекта. Обратите внимание, что от нее будут отложены только блокировки этого объекта; любые другие объекты, с которыми может быть синхронизирован текущий поток, остаются заблокированными, пока поток ожидает.
Поток <var>T</var> затем отключается для планирования потоков и находится в состоянии спячки до тех пор, пока не произойдет одно из следующих действий: <ul><li>. Другой поток вызывает notify
метод для этого объекта, и поток <var>T</var> будет произвольно выбран в качестве потока для пробуждения. <li>Некоторые другие потоки notifyAll
вызывают метод для этого объекта . <li>Некоторый другой поток Thread#interrupt() прерывает поток <var>T</var>. <li>— указанное количество реального времени, более или менее. Количество реального времени в наносекундах задается выражением 1000000 * timeoutMillis + nanos
. Если timeoutMillis
и nanos
равны нулю, то не учитывается реальное время, и поток ожидает пробуждения по одной из других причин. <li>Поток <var>T</var> пробуждается неправильно. (См. ниже.) </Ул>
<Затем поток var>T</var> удаляется из набора ожидания для этого объекта и повторно включается для планирования потоков. Он конкурирует в обычной манере с другими потоками за право синхронизировать на объекте; После восстановления контроля над объектом все его утверждения синхронизации в объекте восстанавливаются в статус-кво ante, т. е. в ситуации на момент wait
вызова метода. Затем <поток var>T</var> возвращается из вызова wait
метода . Таким образом, при возвращении wait
из метода состояние синхронизации объекта и потока T
будет точно таким же, как при вызове wait
метода.
Поток может проснуться без уведомления, прерывания или истечения времени ожидания, так называемого <>em spurious wakeup</em>. Хотя на практике это происходит редко, приложения должны защищаться от него, проверяя условие, которое должно было вызвать пробуждение потока, и продолжая ждать, если условие не будет выполнено. См. пример ниже.
Дополнительные сведения по этой теме см. в разделе 14.2 , "Условные очереди" в брайана Геца и других <пользователей в>java concurrency in Practice</em> (Addison-Wesley, 2006) или в элементе 69 в Joshua Bloch's <em>Effective Java, Second Edition</em> (Addison-Wesley, 2008).
Если текущим потоком является java.lang.Thread#interrupt(), прерванным каким-либо потоком до или во время ожидания, возникает исключение InterruptedException
. >Состояние <прерывания< текущего> потока очищается при возникновении этого исключения. Это исключение не создается до тех пор, пока состояние блокировки этого объекта не будет восстановлено, как описано выше.
Документация по Java для java.lang.Object.wait(long, int)
.
Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License Creative Commons 2.5 Attribution License.
См. также раздел
- Notify()
- NotifyAll()
- Wait()
- <xref:Java.Lang.Object.Wait(System.Int64%2c+System.Int32)>
- Thread
Применяется к
Wait(Int64)
Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления</>em>, <>прерывания< или> em, либо до истечения определенного количества реального времени.
[Android.Runtime.Register("wait", "(J)V", "")]
public void Wait (long timeoutMillis);
[<Android.Runtime.Register("wait", "(J)V", "")>]
member this.Wait : int64 -> unit
Параметры
- timeoutMillis
- Int64
максимальное время ожидания в миллисекундах
- Атрибуты
Исключения
Значение , если millis
.
Значение , если поток, вызывающий этот метод, не является владельцем монитора этого объекта.
Значение , если текущий поток был прерван. Состояние прерванного текущего потока будет очищено до возникновения исключения.
Комментарии
Заставляет текущий поток ждать, пока он не будет пробужден, как правило, из-за <уведомления</>em>, <>прерывания< или> em, либо до истечения определенного количества реального времени.
Во всех отношениях этот метод ведет себя так, как если бы wait(timeoutMillis, 0)
он был вызван. Дополнительные сведения см. в спецификации #wait(long, int)
метода .
Документация по Java для java.lang.Object.wait(long)
.
Части этой страницы являются изменениями, основанными на работе, созданной и совместно используемой проектом и используемой в соответствии с условиями, Creative Commons 2.5 Attribution License Creative Commons 2.5 Attribution License.
См. также раздел
- Notify()
- NotifyAll()
- Wait()
- <xref:Java.Lang.Object.Wait(System.Int64%2c+System.Int32)>
- Thread