Object.Wait 方法
定義
重要
部分資訊涉及發行前產品,在發行之前可能會有大幅修改。 Microsoft 對此處提供的資訊,不做任何明確或隱含的瑕疵擔保。
多載
| 名稱 | 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 所創建與分享的作品,並依授權條款所描述的使用進行修改。
另請參閱
- Notify()
- NotifyAll()
- Wait(Int64)
- <xref:Java.Lang.Object.Wait(System.Int64%2c+System.Int32)>
- Thread
適用於
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 所創建與分享的作品,並依授權條款所描述的使用進行修改。
另請參閱
- Notify()
- NotifyAll()
- Wait()
- <xref:Java.Lang.Object.Wait(System.Int64%2c+System.Int32)>
- Thread
適用於
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給出。 若 timeoutMillis 和 nanos 皆為零,則不考慮實時時間,線程會等待被其他原因之一喚醒。
<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 所創建與分享的作品,並依授權條款所描述的使用進行修改。
另請參閱
- Notify()
- NotifyAll()
- Wait()
- <xref:Java.Lang.Object.Wait(System.Int64%2c+System.Int32)>
- Thread