国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

wait、sleep、notify、notifyAll的區別

2019-11-14 22:33:29
字體:
來源:轉載
供稿:網友
wait、sleep、notify、notifyAll的區別threadexceptionobjectjavawait導致當前的線程等待,直到其他線程調用此對象的 notify方法或 notifyAll 方法。當前的線程必須擁有此對象監視器。該線程發布對此監視器的所有權并等待,直到其他線程通過調用 notify 方法,或 notifyAll 方法通知在此對象的監視器上等待的線程醒來。然后該線程將等到重新獲得對監視器的所有權后才能繼續執行sleep在指定的毫秒數內讓當前正在執行的線程休眠(暫停執行)。該線程不丟失任何監視器的所屬權。wait與sleep

Wait是Object類的方法,范圍是使該Object實例所處的線程。

Sleep()是Thread類專屬的靜態方法,針對一個特定的線程。

Wait方法使實體所處線程暫停執行,從而使對象進入等待狀態,直到被notify方法通知或者wait的等待的時間到。Sleep方法使持有的線程暫停運行,從而使線程進入休眠狀態,直到用interrupt方法來打斷他的休眠或者sleep的休眠的時間到。Wait方法進入等待狀態時會釋放同步鎖(如上例中的lock對象),而Sleep方法不會釋放同步鎖。所以,當一個線程無限Sleep時又沒有任何人去interrupt它的時候,程序就產生大麻煩了notify是用來通知線程,但在notify之前線程是需要獲得lock的。另個意思就是必須寫在synchronized(lockobj) {...}之中。wait也是這個樣子,一個線程需要釋放某個lock,也是在其獲得lock情況下才能夠釋放,所以wait也需要放在synchronized(lockobj) {...}之中。

Sleep與interrupt

interrupt是個很暴力的方法,打斷一個線程的Sleep時并不需要獲得該線程的lock。雖然暴力卻也有暴力的用處。在一個線程無時限sleep的時候也只有interrupt能夠喚醒他。在interrupt的時候會拋出InterruptedException,這個Exception是由Thread 類自動拋出的。因此Interrupt帶有強烈的阻塞味道。

wait與interrupt

interrupt同樣可以打斷wait的等待,與打斷sleep不同的是,被打斷的wait的線程在重新獲得lock之前是不會拋出InterruptedException。

resume和suspend已經被Java遺棄,因為他們天生會引起線程的死鎖。

suspend是個貪婪的家伙,當一個線程在suspend的時候,線程會停下來,但卻仍然持有在這之前獲得的鎖定。其他線程無法使用他鎖定的任何資源,除非這個掛起的線程被resume之后,他才會繼續運行。對于線程的同步,使用wait與notify要安全的多。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 兴隆县| 紫云| 邵阳县| 平南县| 迁西县| 揭阳市| 宣威市| 咸丰县| 水富县| 平潭县| 潼南县| 中超| 信丰县| 当阳市| 姚安县| 鲁甸县| 天台县| 江阴市| 钟祥市| 宣武区| 安溪县| 河津市| 祁连县| 金溪县| 喀什市| 项城市| 治多县| 丰城市| 井冈山市| 若尔盖县| 柳江县| 南木林县| 宜春市| 安图县| 洛浦县| 三江| 景泰县| 丹巴县| 牙克石市| 武隆县| 安宁市|