Object.Wait 方法

定义

重载

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 文档。

此页面的某些部分是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的条款使用。

另请参阅

适用于

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给出。 如果 timeoutMillisnanos 均为零,则不考虑实时,线程将等待,直到被其他原因之一唤醒。 <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 文档。

此页面的某些部分是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的条款使用。

另请参阅

适用于

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 文档。

此页面的某些部分是基于 创建和共享的工作进行的修改,并根据 署名许可中所述的条款使用。

另请参阅

适用于