當前位置:維知科普網 >

生活

> Wait概述是什麼

Wait概述是什麼

Wait概述是什麼

1、public final voidwaitthrowsInterruptedException在其他線程調用此對象的notify方法或notifyAll方法前,導致當前線程等待。換句話説,此方法的行為就好像它僅執行wait調用一樣。當前線程必須擁有此對象監視器。該線程發佈對此監視器的所有權並等待,直到其他線程通過調用notify方法,或notifyAll方法通知在此對象的監視器上等待的線程醒來。然後該線程將等到重新獲得對監視器的所有權後才能繼續執行。對於某一個參數的版本,實現中斷和虛假喚醒是可能的,而且此方法應始終在循環中使用:synchronized(obj){while(conditiondoesnothold)obj。wait;拋出:IllegalMonitorStateException-如果當前線程不是此對象監視器的所有者。InterruptedException-如果在當前線程等待通知之前或者正在等待通知時,任何線程中斷了當前線程。在拋出此異常時,當前線程的中斷狀態被清除。

2、當前線程必須擁有此對象監聽器。此方法導致當前線程(稱之為T)將其自身放置在對象的等待集中,然後放棄此對象上的所有同步要求。出於線程調度目的,在發生以下四種情況之一前,線程T被禁用,且處於休眠狀態:其他某個線程調用此對象的notify方法,並且線程T碰巧被任選為被喚醒的線程。

3、大約已經到達指定的實際時間。但是,如果timeout為零,則不考慮實際時間,在獲得通知前該線程將一直等待。

4、然後,從對象的等待集中刪除線程T,並重新進行線程調度。然後,該線程以常規方式與其他線程競爭,以獲得在該對象上同步的權利;一旦獲得對該對象的控制權,該對象上的所有其同步聲明都將被恢復到以前的狀態,這就是調用wait方法時的情況。然後,線程T從wait方法的調用中返回。所以,從wait方法返回時,該對象和線程T的同步狀態與調用wait方法時的情況完全相同。在沒有被通知、中斷或超時的情況下,線程還可以喚醒一個所謂的虛假喚醒(spurious wakeup)。雖然這種情況在實踐中很少發生,但是應用程序必須通過以下方式防止其發生,即對應該導致該線程被提醒的條件進行測試,如果不滿足該條件,則繼續等待。

標籤: Wait 概述
  • 文章版權屬於文章作者所有,轉載請註明 https://wzkpw.com/sh/3619oz.html