中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

焦作市| 上虞市| 乐亭县| 涿鹿县| 屯昌县| 龙山县| 宁津县| 安仁县| 莒南县| 青冈县| 贵溪市| 德令哈市| 凤翔县| 镇坪县| 定南县| 武乡县| 天祝| 昭觉县| 高密市| 永年县| 南平市| 鹿泉市| 宾川县| 秀山| 千阳县| 关岭| 苏尼特左旗| 田阳县| 东乌| 新巴尔虎左旗| 安塞县| 巴南区| 陆丰市| 溧阳市| 东城区| 榕江县| 普陀区| 绥德县| 西平县| 安平县| 白银市|