java中線程掛起的幾種方式詳解
前言
在Java中使用線程的時候肯定會有線程掛起的這種情況出現(xiàn),在Java中提供了3種方式:suspend/resume、wait/notify,notifyAll、park/unpark。
1.suspend/resume
這種方式已經(jīng)在Java中被棄用,因為它容易引起死鎖。在使用關(guān)鍵字synchronized的時候如
synchronized (this) { Thread.currentThread().suspend(); }
這個時候使用resume方法是無法喚醒線程的,還有一種情況是如果在resume方法之后才進行suspend方法的調(diào)用,這個也是無法進行suspend方法的喚醒的,因為這個事件發(fā)生的順序已經(jīng)造成了死鎖的出現(xiàn)。
2.wait/notify,notifyAll
這個是Java中常用的線程掛起方法,當(dāng)調(diào)用wait方法的時候線程會自動的釋放掉占有的線程資源鎖,然后通過notify或notifyAll方法進行wait方法的喚醒,因此在這個地方不會出現(xiàn)死鎖,當(dāng)時如suspend/resume
中提到的,如果在notify或notifyAll方法之后在進行wait操作,那么肯定也是會出現(xiàn)死鎖的。
這里必須說明一下的是sleep方法,雖然它也能將線程掛起,但是它會產(chǎn)生InterruptedException
異常,當(dāng)sleep一定時間后它將會自動執(zhí)行后面的方法,也可以通過interrupt方法進行主動打斷sleep方法進行線程喚醒。
3.park/unpark
park的字面量意思是指停車場的意思,使用park來掛起線程后需要調(diào)用unpark來進行喚醒,這個沒有先后順序的區(qū)分,如果你提前進行了unpark,然后在進行park也是可以的,但是提前了的多個unpark只能看做是一個unpark,不能進行重復(fù)疊加,如果再次park的話需要新的unpark來進行喚醒操作,這個比如你在停車場進行停車操作,你如果提前進行了預(yù)約停車,你在未進入停車場之前都是可以進行多次預(yù)約的,這所有的預(yù)約只扣一次錢(unpark),但是這所有的預(yù)約操作都看作是你這一次進入停車場停車(park)的憑證,如果你離開了通過繳費憑證(unpark)一旦你想進行下一次停車,那么已經(jīng)使用過的預(yù)約都不能進行作數(shù)了,你只能再次預(yù)約或者直接進入停車場,一旦要離開只能再次繳費(unpark)。
調(diào)用park/unpark
使用的是LockSupport.park()/LockSupport.unpark()。
使用park/unpark
的使用使用synchronized關(guān)鍵字也會出現(xiàn)死鎖的情況,因為它并不釋放線程所占用的鎖資源,所以使用的時候也需要注意。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
讀取Java文件到byte數(shù)組的三種方法(總結(jié))
下面小編就為大家?guī)硪黄x取Java文件到byte數(shù)組的三種方法(總結(jié))。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-08-08JAVA數(shù)據(jù)寫入生成excel文件和發(fā)送郵件
這篇文章主要介紹了JAVA數(shù)據(jù)寫入生成excel文件和發(fā)送郵件,流程:先導(dǎo)包 => 郵箱開啟配置 => java寫好配置類 => 測試發(fā)送 => 數(shù)據(jù)寫入excel => 郵件帶附件發(fā)送2024-06-06SpringCloud Alibaba 基本開發(fā)框架搭建過程
這篇文章主要介紹了SpringCloud Alibaba 基本開發(fā)框架搭建過程,開發(fā)工具選用的idea,本文通過圖文實例相結(jié)合給大家分享搭建全過程,需要的朋友可以參考下2021-06-06SpringBoot2底層注解@ConfigurationProperties配置綁定
這篇文章主要介紹了SpringBoot2底層注解@ConfigurationProperties配置綁定,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪2022-05-05Spring Boot自定義favicon實現(xiàn)方法實例解析
這篇文章主要介紹了Spring Boot自定義favicon實現(xiàn)方法實例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-08-08