1、說(shuō)明
線程鎖死是指等待線程由于喚醒其所需的條件永遠(yuǎn)無(wú)法成立,或者其他線程無(wú)法喚醒這個(gè)線程而一直處于非運(yùn)行狀態(tài)(線程并未終止)導(dǎo)致其任務(wù) 一直無(wú)法進(jìn)展。
2、線程鎖死分為兩種:
(1)信號(hào)丟失鎖死:信號(hào)丟失鎖死是因?yàn)闆](méi)有對(duì)應(yīng)的通知線程來(lái)將等待線程喚醒,導(dǎo)致等待線程一直處于等待狀態(tài)。
典型例子是等待線程在執(zhí)行Object.wait( )/Condition.await( )前沒(méi)有對(duì)保護(hù)條件進(jìn)行判斷,而此時(shí)保護(hù)條件實(shí)際上可能已經(jīng)成立,此后可能并無(wú)其他線程更新相應(yīng)保護(hù)條件涉及的共享變量使其成立并通知等待線程,這就使得等待線程一直處于等待狀態(tài),從而使其任務(wù)一直無(wú)法進(jìn)展。
(2)嵌套監(jiān)視器鎖死:嵌套監(jiān)視器鎖死是由于嵌套鎖導(dǎo)致等待線程永遠(yuǎn)無(wú)法被喚醒的一種故障。
比如一個(gè)線程,只釋放了內(nèi)層鎖Y.wait(),但是沒(méi)有釋放外層鎖X; 但是通知線程必須先獲得外層鎖X,才可以通過(guò) Y.notifyAll()來(lái)喚醒等待線程,這就導(dǎo)致出現(xiàn)了嵌套等待現(xiàn)象。
以上就是java線程鎖死的介紹,希望對(duì)大家有所幫助。更多關(guān)于“java培訓(xùn)”的問(wèn)題,歡迎咨詢(xún)千鋒教育在線名師。千鋒教育多年辦學(xué),課程大綱緊跟企業(yè)需求,更科學(xué)更嚴(yán)謹(jǐn),每年培養(yǎng)泛IT人才近2萬(wàn)人。不論你是零基礎(chǔ)還是想提升,都可以找到適合的班型,千鋒教育隨時(shí)歡迎你來(lái)試聽(tīng)。