亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

java中實現線程掛起的方法有哪些

發布時間:2021-06-11 15:51:22 來源:億速云 閱讀:181 作者:Leah 欄目:編程語言

本篇文章為大家展示了java中實現線程掛起的方法有哪些,內容簡明扼要并且容易理解,絕對能使你眼前一亮,通過這篇文章的詳細介紹希望你能有所收獲。

前言

在Java中使用線程的時候肯定會有線程掛起的這種情況出現,在Java中提供了3種方式:suspend/resume、wait/notify,notifyAll、park/unpark。

1.suspend/resume

這種方式已經在Java中被棄用,因為它容易引起死鎖。在使用關鍵字synchronized的時候如

synchronized (this) { 
 Thread.currentThread().suspend(); 
}

這個時候使用resume方法是無法喚醒線程的,還有一種情況是如果在resume方法之后才進行suspend方法的調用,這個也是無法進行suspend方法的喚醒的,因為這個事件發生的順序已經造成了死鎖的出現。

2.wait/notify,notifyAll

這個是Java中常用的線程掛起方法,當調用wait方法的時候線程會自動的釋放掉占有的線程資源鎖,然后通過notify或notifyAll方法進行wait方法的喚醒,因此在這個地方不會出現死鎖,當時如suspend/resume中提到的,如果在notify或notifyAll方法之后在進行wait操作,那么肯定也是會出現死鎖的。

這里必須說明一下的是sleep方法,雖然它也能將線程掛起,但是它會產生InterruptedException異常,當sleep一定時間后它將會自動執行后面的方法,也可以通過interrupt方法進行主動打斷sleep方法進行線程喚醒。

3.park/unpark

park的字面量意思是指停車場的意思,使用park來掛起線程后需要調用unpark來進行喚醒,這個沒有先后順序的區分,如果你提前進行了unpark,然后在進行park也是可以的,但是提前了的多個unpark只能看做是一個unpark,不能進行重復疊加,如果再次park的話需要新的unpark來進行喚醒操作,這個比如你在停車場進行停車操作,你如果提前進行了預約停車,你在未進入停車場之前都是可以進行多次預約的,這所有的預約只扣一次錢(unpark),但是這所有的預約操作都看作是你這一次進入停車場停車(park)的憑證,如果你離開了通過繳費憑證(unpark)一旦你想進行下一次停車,那么已經使用過的預約都不能進行作數了,你只能再次預約或者直接進入停車場,一旦要離開只能再次繳費(unpark)。

調用park/unpark使用的是LockSupport.park()/LockSupport.unpark()。

使用park/unpark的使用使用synchronized關鍵字也會出現死鎖的情況,因為它并不釋放線程所占用的鎖資源,所以使用的時候也需要注意。

上述內容就是java中實現線程掛起的方法有哪些,你們學到知識或技能了嗎?如果還想學到更多技能或者豐富自己的知識儲備,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

新竹市| 乌拉特中旗| 林周县| 麻栗坡县| 腾冲县| 阿坝| 南江县| 登封市| 广饶县| 镶黄旗| 眉山市| 汤原县| 景洪市| 莱阳市| 历史| 石嘴山市| 封丘县| 故城县| 兴城市| 江津市| 息烽县| 独山县| 天峻县| 闽清县| 台州市| 巴东县| 大方县| 华坪县| 凤凰县| 兰溪市| 奉贤区| 龙胜| 阿合奇县| 贡嘎县| 琼结县| 丹棱县| 阜宁县| 永善县| 牡丹江市| 聂荣县| 嘉祥县|