Object.Wait 方法
定义
重要
一些信息与预发行产品相关,相应产品在发行之前可能会进行重大修改。 对于此处提供的信息,Microsoft 不作任何明示或暗示的担保。
重载
Wait() |
导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>。<> |
Wait(Int64, Int32) |
导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<> |
Wait(Int64) |
导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<> |
Wait()
导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>。<>
[Android.Runtime.Register("wait", "()V", "")]
public void Wait ();
[<Android.Runtime.Register("wait", "()V", "")>]
member this.Wait : unit -> unit
- 属性
例外
如果调用此方法的线程不是此对象的监视器的所有者,则为 。
如果当前线程已中断,则为 。 在引发异常之前,当前线程的中断状态将被清除。
注解
导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>。<>
在所有方面,此方法的行为就像 wait(0L, 0)
已调用一样。 有关详细信息,请参阅 方法的 #wait(long, int)
规范。
的 java.lang.Object.wait()
Java 文档。
此页面的某些部分是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的条款使用。
另请参阅
- Notify()
- NotifyAll()
- Wait(Int64)
- <xref:Java.Lang.Object.Wait(System.Int64%2c+System.Int32)>
- Thread
适用于
Wait(Int64, Int32)
导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</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-999999(含 0-999999)
- 属性
例外
如果 millis
为 , nanos
则为 或 nanos >
999999
。
如果调用此方法的线程不是此对象的监视器的所有者,则为 。
如果当前线程已中断,则为 。 在引发异常之前,当前线程的中断状态将被清除。
注解
导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</em>,或直到经过一定数量的实时。<>
当前线程必须拥有此对象的监视器锁。 #notify notify
有关线程成为监视器锁所有者的方式的说明,请参阅 方法。
此方法会导致当前线程 (此处 <称为 var>T</var>) 将自身置于此对象的等待集中,然后放弃此对象上的所有同步声明。 请注意,仅放弃此对象上的锁;当线程等待时,当前线程可能同步的任何其他对象将保持锁定状态。
然后,线程 var T/var> 出于线程计划目的变为禁用状态,并处于休眠状态,直到发生以下情况之一:<ul><li>其他线程调用notify
此对象的 方法,线程 <var>/<var> 恰好被任意选择为要唤醒的线程。<>< <li>其他一些线程为此对象调用 notifyAll
方法。 <li>某些其他线程 Thread#interrupt () 中断线程 <var>T</var>。 <li>指定的实时量已过,或多或少。 实时量(以纳秒为单位)由表达式 1000000 * timeoutMillis + nanos
给出。 如果 timeoutMillis
和 nanos
均为零,则不考虑实时,线程将等待,直到被其他原因之一唤醒。 <li>Thread <var>T</var> 被虚假唤醒。 (请参阅下文。 <) /ul>
然后,从此对象的等待集中删除线程 <var>T</var> ,并重新启用线程计划。 它以通常的方式与其他线程竞争,以获取在对象上同步的权限;一旦它重新获得对对象的控制,它对该对象的所有同步声明将还原到状态-即,到调用方法时 wait
的情况。 然后,线程 <var>T</var> 从方法的 wait
调用返回。 因此,从 wait
方法返回时,对象和线程 T
的同步状态与调用方法时 wait
的状态完全相同。
线程可以在没有收到通知、中断或超时的情况下唤醒,即所谓的<>虚假唤醒</唤醒>。 虽然这种情况在实践中很少发生,但应用程序必须通过测试导致线程被唤醒的条件来防范这种情况,并在条件不满足时继续等待。 请参阅以下示例。
有关本主题的详细信息,请参阅 Brian Goetz 等<>的“Java 并发实践<”中的>第 14.2 节“条件队列”, (Addison-Wesley,2006) 或 Joshua Bloch 的 <>em Effective Java,Second Edition</em> (Addison-Wesley,2008) 。
如果当前线程在等待之前或等待期间被任何线程中断的 java.lang.Thread#interrupt () ,则会 InterruptedException
引发 。 <>引发此异常时,当前线程的 em 中断状态</em> 将被清除。 在如上所述还原此对象的锁定状态之前,不会引发此异常。
的 java.lang.Object.wait(long, int)
Java 文档。
此页面的某些部分是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的条款使用。
另请参阅
- Notify()
- NotifyAll()
- Wait()
- <xref:Java.Lang.Object.Wait(System.Int64%2c+System.Int32)>
- Thread
适用于
Wait(Int64)
导致当前线程等待,直到它被唤醒,通常是通过 em <通知/em> 或 <em>interrupted</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> 或 <em>interrupted</em>,或直到经过一定数量的实时。<>
在所有方面,此方法的行为就像 wait(timeoutMillis, 0)
已调用一样。 有关详细信息,请参阅 方法的 #wait(long, int)
规范。
的 java.lang.Object.wait(long)
Java 文档。
此页面的某些部分是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的条款使用。
另请参阅
- Notify()
- NotifyAll()
- Wait()
- <xref:Java.Lang.Object.Wait(System.Int64%2c+System.Int32)>
- Thread