Deadlock
1. 死鎖產(chǎn)生:
count = 10000:
count = 20000:
count = 5000:
2. 對(duì)上述程序產(chǎn)生死鎖的解釋:
關(guān)鍵字 synchronized:當(dāng)它用來修飾一個(gè)方法或者一個(gè)代碼塊的時(shí)候,能夠保證在同一時(shí)刻最多只有一個(gè)線程執(zhí)行該段代碼;當(dāng)一個(gè)線程訪問object的一個(gè)synchronized同步代碼塊或同步方法時(shí)撩笆,其他線程對(duì)object中所有其他synchronized同步代碼塊或同步方法的訪問將被阻塞用僧。
在主函數(shù)的時(shí)間軸中,當(dāng)t.start()之后至壤,線程t就被插入到調(diào)度隊(duì)列里,當(dāng)調(diào)度到他時(shí),就執(zhí)行run()富蓄。
這里設(shè)置了一個(gè)count值,當(dāng)t.start()執(zhí)行后慢逾,就開始延時(shí)立倍,執(zhí)行b.methodB(a),當(dāng)延時(shí)結(jié)束后侣滩,若t.start()尚未執(zhí)行完畢口注,主線程中開始執(zhí)行a.methodA(b),由于關(guān)鍵字synchroniazed的限制君珠,不能有兩個(gè)以上的線程同時(shí)執(zhí)行寝志,因此產(chǎn)生死鎖。
4. 產(chǎn)生死鎖的4個(gè)必要條件:
死鎖就是兩個(gè)或者多個(gè)進(jìn)程策添,互相請(qǐng)求對(duì)方占有的資源材部。
- 互斥條件:一個(gè)資源每次只能被一個(gè)進(jìn)程使用
- 請(qǐng)求與保持條件:一個(gè)進(jìn)程因請(qǐng)求資源而阻塞時(shí),對(duì)已獲得的資源保持不放
- 不剝奪條件:進(jìn)程已獲得的資源唯竹,在末使用完之前乐导,不能強(qiáng)行剝奪
- 循環(huán)等待條件:若干進(jìn)程之間形成一種頭尾相接的循環(huán)等待資源關(guān)系