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