Java多線程8-線程的活性保障

活性故障:由資源稀缺性或者程序自身的問(wèn)題和缺陷導(dǎo)致線程一直處于非RUNNABLE狀態(tài)伍伤,或者程序雖然處于RUNNABLE狀態(tài)但是其要執(zhí)行的任務(wù)卻一直無(wú)法進(jìn)展的故障現(xiàn)象?

一扰魂、鷸蚌相爭(zhēng):死鎖

如果兩個(gè)或更多個(gè)線程因相互等待對(duì)方而被永遠(yuǎn)暫停劝评,那我們就稱這些線程產(chǎn)生了死鎖



死鎖的檢測(cè):哲學(xué)家就餐問(wèn)題

死鎖產(chǎn)生的條件:

a蒋畜、資源互斥:每個(gè)資源一次只能夠一個(gè)線程使用

b撞叽、資源不可搶奪:涉及的資源只能夠被其持有者線程主動(dòng)釋放,而無(wú)法被

資源持有者和申請(qǐng)者之外的第三方線程所搶奪

c科展、占用并等待資源:涉及的線程至少持有一個(gè)資源并申請(qǐng)其他資源B,而B(niǎo)恰好被其他線程持有

d才睹、循環(huán)等待資源:涉及到的線程必須在等待別的線程持有的資源琅攘,而別的線程又反過(guò)來(lái)等待第一個(gè)線程所持有的資源

條件與死鎖關(guān)系:必要非充分條件:產(chǎn)生死鎖一定滿足上述條件松邪,但滿足上述條件不一定是死鎖

規(guī)避死鎖的方法

a、粗鎖法:使用粗粒度鎖代替多個(gè)鎖

b置济、鎖排序法:相關(guān)線程使用全局統(tǒng)一的順序申請(qǐng)鎖

c、使用ReentrantLock.tryLock(Long护盈, TimeUnit)申請(qǐng)鎖

A線程持有一個(gè)鎖的情況下調(diào)用外部分方法羞酗,而外部方法申請(qǐng)持有線程A的同步鎖方法檀轨;則會(huì)造成死鎖

d、開(kāi)放調(diào)用:一個(gè)方法在調(diào)用外部方法(包括其他類的方法以及當(dāng)前類的可覆蓋方法)的時(shí)候不持有任何鎖

e卫枝、鎖的替代品:無(wú)狀態(tài)對(duì)象讹挎、線程特有對(duì)象筒溃、volatile關(guān)鍵字等

二、沉睡不醒的睡美人:鎖死

a浑测、信號(hào)丟失鎖死:沒(méi)有相應(yīng)的通知線程來(lái)喚醒等待線程而使等待線程一直處于等待狀態(tài)

b歪玲、嵌套監(jiān)視器鎖死:嵌套鎖導(dǎo)致等待線程永遠(yuǎn)無(wú)法被喚醒

代碼例子:

private finalBlockingQueuequeue=newArrayBlockingQueue(10);

private int

processed=0;

private int

accepted=0;

public static void

main(String[] args)throwsInterruptedException{

NestedMonitorLockoutDemo demo =

newNestedMonitorLockoutDemo();

demo.start();

int

i=0;

while

(i-- <100000){

demo.accept(

"message"+ i);

}

}

privatesynchronized voidaccept(Stringmessage)throwsInterruptedException{

queue.put(message);//不要在臨界區(qū)調(diào)用BlockingQueue的阻塞方法漱贱,會(huì)導(dǎo)致嵌套監(jiān)視器鎖死accepted++;

}

privatesynchronized voiddoProcess()throwsInterruptedException {

String msg =

queue.take();//不要在臨界區(qū)調(diào)用BlockingQueue的阻塞方法夭委,會(huì)導(dǎo)致嵌套監(jiān)視器鎖死System.out.print("Process:"+ msg);

processed++;

}

privatevoidstart(){

newWorkerThread().start();

}

classWorkerThreadextendsThread{

@Override

publicvoidrun(){

try{

while(true){

doProcess()

;

}

}

catch(InterruptedException e) {

e.printStackTrace()

;

}

}

}

}

三募强、巧婦難為無(wú)米之炊:線程饑餓

線程一直無(wú)法獲得其所需資源而導(dǎo)致其任務(wù)一直無(wú)法進(jìn)展

典型例子:在高爭(zhēng)用環(huán)境下使用非公平模式的讀寫鎖

四、屢戰(zhàn)屢敗令境,屢敗屢戰(zhàn):活鎖

線程一直處于運(yùn)行狀態(tài)讹开,但其任務(wù)一直無(wú)法進(jìn)展

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末汹粤,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子国葬,更是在濱河造成了極大的恐慌芹壕,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,042評(píng)論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異睁壁,居然都是意外死亡堡僻,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,996評(píng)論 2 384
  • 文/潘曉璐 我一進(jìn)店門硼讽,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)固阁,“玉大人备燃,你說(shuō)我怎么就攤上這事并齐】退埃” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 156,674評(píng)論 0 345
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)秧均。 經(jīng)常有香客問(wèn)我号涯,道長(zhǎng)链快,這世上最難降的妖魔是什么久又? 我笑而不...
    開(kāi)封第一講書人閱讀 56,340評(píng)論 1 283
  • 正文 為了忘掉前任地消,我火速辦了婚禮,結(jié)果婚禮上畏妖,老公的妹妹穿的比我還像新娘脉执。我一直安慰自己,他們只是感情好戒劫,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,404評(píng)論 5 384
  • 文/花漫 我一把揭開(kāi)白布半夷。 她就那樣靜靜地躺著,像睡著了一般迅细。 火紅的嫁衣襯著肌膚如雪巫橄。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,749評(píng)論 1 289
  • 那天茵典,我揣著相機(jī)與錄音,去河邊找鬼统阿。 笑死彩倚,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的扶平。 我是一名探鬼主播,決...
    沈念sama閱讀 38,902評(píng)論 3 405
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼麻献,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了餐曼?” 一聲冷哼從身側(cè)響起源譬,我...
    開(kāi)封第一講書人閱讀 37,662評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤养渴,失蹤者是張志新(化名)和其女友劉穎翘紊,沒(méi)想到半個(gè)月后帆疟,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,110評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡蟋滴,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,451評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了涩馆。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,577評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡展运,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情锈遥,我是刑警寧澤,帶...
    沈念sama閱讀 34,258評(píng)論 4 328
  • 正文 年R本政府宣布蚊夫,位于F島的核電站,受9級(jí)特大地震影響琅轧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜睹酌,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,848評(píng)論 3 312
  • 文/蒙蒙 一辐啄、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦阱洪、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,726評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)嵌莉。三九已至可婶,卻和暖如春椎扬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背揖铜。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,952評(píng)論 1 264
  • 我被黑心中介騙來(lái)泰國(guó)打工失仁, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人茬射。 一個(gè)月前我還...
    沈念sama閱讀 46,271評(píng)論 2 360
  • 正文 我出身青樓刚梭,卻偏偏與公主長(zhǎng)得像朴读,于是被迫代替她去往敵國(guó)和親衅金。 傳聞我的和親對(duì)象是個(gè)殘疾皇子您觉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,452評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容