您好,登錄后才能下訂單哦!
本篇文章為大家展示了java中實(shí)現(xiàn)線程掛起的方法有哪些,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
前言
在Java中使用線程的時(shí)候肯定會(huì)有線程掛起的這種情況出現(xiàn),在Java中提供了3種方式:suspend/resume、wait/notify,notifyAll、park/unpark。
1.suspend/resume
這種方式已經(jīng)在Java中被棄用,因?yàn)樗菀滓鹚梨i。在使用關(guān)鍵字synchronized的時(shí)候如
synchronized (this) { Thread.currentThread().suspend(); }
這個(gè)時(shí)候使用resume方法是無(wú)法喚醒線程的,還有一種情況是如果在resume方法之后才進(jìn)行suspend方法的調(diào)用,這個(gè)也是無(wú)法進(jìn)行suspend方法的喚醒的,因?yàn)檫@個(gè)事件發(fā)生的順序已經(jīng)造成了死鎖的出現(xiàn)。
2.wait/notify,notifyAll
這個(gè)是Java中常用的線程掛起方法,當(dāng)調(diào)用wait方法的時(shí)候線程會(huì)自動(dòng)的釋放掉占有的線程資源鎖,然后通過(guò)notify或notifyAll方法進(jìn)行wait方法的喚醒,因此在這個(gè)地方不會(huì)出現(xiàn)死鎖,當(dāng)時(shí)如suspend/resume
中提到的,如果在notify或notifyAll方法之后在進(jìn)行wait操作,那么肯定也是會(huì)出現(xiàn)死鎖的。
這里必須說(shuō)明一下的是sleep方法,雖然它也能將線程掛起,但是它會(huì)產(chǎn)生InterruptedException
異常,當(dāng)sleep一定時(shí)間后它將會(huì)自動(dòng)執(zhí)行后面的方法,也可以通過(guò)interrupt方法進(jìn)行主動(dòng)打斷sleep方法進(jìn)行線程喚醒。
3.park/unpark
park的字面量意思是指停車(chē)場(chǎng)的意思,使用park來(lái)掛起線程后需要調(diào)用unpark來(lái)進(jìn)行喚醒,這個(gè)沒(méi)有先后順序的區(qū)分,如果你提前進(jìn)行了unpark,然后在進(jìn)行park也是可以的,但是提前了的多個(gè)unpark只能看做是一個(gè)unpark,不能進(jìn)行重復(fù)疊加,如果再次park的話需要新的unpark來(lái)進(jìn)行喚醒操作,這個(gè)比如你在停車(chē)場(chǎng)進(jìn)行停車(chē)操作,你如果提前進(jìn)行了預(yù)約停車(chē),你在未進(jìn)入停車(chē)場(chǎng)之前都是可以進(jìn)行多次預(yù)約的,這所有的預(yù)約只扣一次錢(qián)(unpark),但是這所有的預(yù)約操作都看作是你這一次進(jìn)入停車(chē)場(chǎng)停車(chē)(park)的憑證,如果你離開(kāi)了通過(guò)繳費(fèi)憑證(unpark)一旦你想進(jìn)行下一次停車(chē),那么已經(jīng)使用過(guò)的預(yù)約都不能進(jìn)行作數(shù)了,你只能再次預(yù)約或者直接進(jìn)入停車(chē)場(chǎng),一旦要離開(kāi)只能再次繳費(fèi)(unpark)。
調(diào)用park/unpark
使用的是LockSupport.park()/LockSupport.unpark()。
使用park/unpark
的使用使用synchronized關(guān)鍵字也會(huì)出現(xiàn)死鎖的情況,因?yàn)樗⒉会尫啪€程所占用的鎖資源,所以使用的時(shí)候也需要注意。
上述內(nèi)容就是java中實(shí)現(xiàn)線程掛起的方法有哪些,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注億速云行業(yè)資訊頻道。
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。