在線程訪問(wèn)第一個(gè)上鎖的方法的時(shí)候,線程拿到了這把鎖,同時(shí)其他線程陷入阻塞狀態(tài)在等待,第一個(gè)獲得鎖的線程繼續(xù)訪問(wèn)第二個(gè)上鎖的方法,但這個(gè)時(shí)候,第二個(gè)上鎖的方法是在第一個(gè)上鎖方法的內(nèi)部的,所以這個(gè)線程無(wú)法釋放第一把鎖,也就無(wú)法拿到第二個(gè)方法的鎖,所以,此線程陷入了一種既無(wú)法釋放鎖也無(wú)法拿到鎖的狀態(tài),這應(yīng)該就是死鎖了,于此同時(shí)其他線程也只能干等著,但是那個(gè)線程也很無(wú)奈啊,放不下也拿不起,都干等著,我都著急,于是我直接長(zhǎng)按電源鍵,哈哈,這是我的理解
2019-01-09
最贊回答 / qq_Wzl_3
我對(duì)jvm不太了解,但用Linux中的給你解釋下。
當(dāng)一個(gè)線程想去獲取一把鎖而獲取不到時(shí),是處在一個(gè)死循環(huán)狀態(tài)。
while( 沒(méi)有得到鎖)
{
???? 嘗試獲取鎖;
}
所以就相當(dāng)于死在了這個(gè)循環(huán)里面。
當(dāng)然還有嘗試鎖,先嘗試獲取,沒(méi)獲取到就退出,而不是死在循環(huán)中。
鎖的內(nèi)容還有很多,慢慢學(xué)吧。
2019-01-09
可以這樣理解,因?yàn)殪o態(tài)方法屬于類,當(dāng)多個(gè)線程訪問(wèn)的這個(gè)靜態(tài)方法的時(shí)候,相當(dāng)于數(shù)據(jù)共享了,所以當(dāng)給這個(gè)方法上鎖之后,肯定是不能同時(shí)訪問(wèn)的,而不加static的話,就是多個(gè)線程自己執(zhí)行自己的方法,cpu隨機(jī)的,就算加了鎖也沒(méi)什么卵用。除非這個(gè)Runable子類被其他線程共享,這也是數(shù)據(jù)共享了
2019-01-08