語言

Object.Wait 方法

定義

多載

名稱 Description
Wait()

導致目前執行緒等待被喚醒,通常是透過 <em>通知</><em 或 em>中斷</em> 來喚醒。

Wait(Int64)

會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。

Wait(Int64, Int32)

會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。

Wait()

導致目前執行緒等待被喚醒,通常是透過 <em>通知</><em 或 em>中斷</em> 來喚醒。

[Android.Runtime.Register("wait", "()V", "")]
public void Wait();
[<Android.Runtime.Register("wait", "()V", "")>]
member this.Wait : unit -> unit
屬性

例外狀況

如果呼叫此方法的執行緒不是該物件監控器的擁有者,

如果目前執行緒被中斷。 當前執行緒的中斷狀態會在拋出例外前被清除。

備註

導致目前執行緒等待被喚醒,通常是透過 <em>通知</><em 或 em>中斷</em> 來喚醒。

在各方面,這個方法的行為就像 wait(0L, 0) 是被呼叫過一樣。 詳情請參閱方法說明 #wait(long, int)

java.lang.Object.wait()Java 檔。

本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。

另請參閱

適用於

Wait(Int64)

會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 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 或 em>中斷</em>,或是經過一定的真實時間。

在各方面,這個方法的行為就像 wait(timeoutMillis, 0) 是被呼叫過一樣。 詳情請參閱方法說明 #wait(long, int)

java.lang.Object.wait(long)Java 檔。

本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。

另請參閱

適用於

Wait(Int64, Int32)

會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 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

屬性

例外狀況

millis nanos nanos > 999999

如果呼叫此方法的執行緒不是該物件監控器的擁有者,

如果目前執行緒被中斷。 當前執行緒的中斷狀態會在拋出例外前被清除。

備註

會讓目前執行緒等待喚醒,通常是透過 <em>通知</><em 或 em>中斷</em>,或是經過一定的真實時間。

目前執行緒必須擁有該物件的監視鎖。 請參閱方法說明 #notify notify ,說明線程如何成為監視鎖的擁有者。

此方法會使目前執行緒(此 <處稱為 var>T</var>)將自己置於該物件的等待集合中,然後放棄對該物件的所有同步權利要求。 請注意,只有這個物件上的鎖會被解除;目前執行緒可能同步的其他物件在執行緒等待期間仍保持鎖定狀態。

執行緒 var T/var< 隨後會被停用以進行執行緒排程,並處於休眠狀態,直到以下其中一項發生:>ul<>li<某執行緒呼叫>該物件的方法,且執行緒 <var>Tnotify/var< 恰巧被任意選為被喚醒的執行緒。><> <li>有其他執行緒會調用這個物件的方法 notifyAll 。 <li>其他執行緒 Thread#interrupt() 中斷執行緒 <var T></var>。 <李>指定的實際時間大致已過。 實際時間(奈秒)由表達式 1000000 * timeoutMillis + nanos給出。 若 timeoutMillisnanos 皆為零,則不考慮實時時間,線程會等待被其他原因之一喚醒。 <li>線 <var>T</var> 被虛假覺醒。 (詳見下文。) </ul>

接著,執行緒 <var>< T/var> 會從該物件的等待集中移除,並重新啟用以進行執行緒排程。 它以通常的方式與其他執行緒競爭在物件上同步的權利;一旦重新取得對物件的控制權,所有對物件的同步要求都會恢復到先前狀態——也就是方法被呼叫時 wait 的狀態。 執行緒 <var>T</var> 會從方法呼叫 wait 中回傳。 因此,從 wait 方法回傳時,物件與執行緒 T 的同步狀態與方法被呼叫時 wait 完全相同。

執行緒可以在未被通知、中斷或逾時的情況下喚醒,這稱為 <em>虛假喚醒</em>。 雖然實務上這種情況很少發生,但應用程式必須透過測試導致線程喚醒的條件來防範,若條件未被滿足則繼續等待。 請參閱以下範例。

欲了解更多相關資訊,請參閱 Brian Goetz 等人合著<《emJava> Concurrency in Practice</em>》(Addison-Wesley, 2006)中的第 14.2 節「條件佇列」,或 Joshua Bloch <的《em>Effective Java, Second Edition</em>》(Addison-Wesley, 2008)第 69 項。

如果目前執行緒是 java.lang.Thread#interrupt() 被任何執行緒在等待前或等待時中斷,則會拋出 an InterruptedException 。 <當拋出此例外時,當前執行緒的 em>中斷狀態</em> 會被清除。 此例外在該物件的鎖狀態恢復如上所述後才會拋出。

java.lang.Object.wait(long, int)Java 檔。

本頁部分內容為基於 Open Source Project 所創建與分享的作品,並依授權條款所描述的使用進行修改。

另請參閱

適用於