![死鎖的例子演示_第1頁](http://file4.renrendoc.com/view/1a0acf22db56466ac9f15c4b2e25923d/1a0acf22db56466ac9f15c4b2e25923d1.gif)
![死鎖的例子演示_第2頁](http://file4.renrendoc.com/view/1a0acf22db56466ac9f15c4b2e25923d/1a0acf22db56466ac9f15c4b2e25923d2.gif)
![死鎖的例子演示_第3頁](http://file4.renrendoc.com/view/1a0acf22db56466ac9f15c4b2e25923d/1a0acf22db56466ac9f15c4b2e25923d3.gif)
![死鎖的例子演示_第4頁](http://file4.renrendoc.com/view/1a0acf22db56466ac9f15c4b2e25923d/1a0acf22db56466ac9f15c4b2e25923d4.gif)
![死鎖的例子演示_第5頁](http://file4.renrendoc.com/view/1a0acf22db56466ac9f15c4b2e25923d/1a0acf22db56466ac9f15c4b2e25923d5.gif)
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、死鎖的例演 ?死鎖定發(fā)在并發(fā)場(chǎng)景中。我們?yōu)榱吮WC線程安全,有時(shí)會(huì)給程序使各種能保證并發(fā)安全的具,尤其是鎖,但是如果在使過程中處理不得當(dāng),就有可能會(huì)導(dǎo)致發(fā)死鎖的情況互不相讓死鎖是種狀態(tài),當(dāng)兩個(gè)(或多個(gè))線程(或進(jìn)程)相互持有對(duì)所需要的資源,卻都不主動(dòng)釋放中所持有的資源,導(dǎo)致家都獲取不到想要的資源,所有相關(guān)的線程(或進(jìn)程)都法繼續(xù)往下執(zhí),在未改變這種狀態(tài)之前都不能向前推進(jìn),我們就把這種狀態(tài)稱為死鎖狀態(tài),認(rèn)為它們發(fā)了死鎖。通俗的講,死鎖就是兩個(gè)或多個(gè)線程(或進(jìn)程)被限期地阻塞,相互等待對(duì)中資源的種狀態(tài)兩個(gè)線程的例此時(shí)我們有兩個(gè)線程,分別是線程 A 和線程 B,假設(shè)線程 A 現(xiàn)在持有了鎖 A,線程 B
2、 持有了鎖 B,然后線程 A 嘗試去獲取鎖 B,當(dāng)然它獲取不到,因?yàn)榫€程 B 還沒有釋放鎖 B。然后線程 B 來嘗試獲取鎖 A,同樣線程 B 也獲取不到鎖 A,因?yàn)殒i A 已經(jīng)被線程 A 持有了。這樣來,線程 A 和線程 B 就發(fā)了死鎖,因?yàn)樗鼈兌枷嗷コ钟袑?duì)想要的資源,卻不釋放中的資源,形成相互等待,且會(huì)直等待下去多個(gè)線程造成死鎖的情況死鎖不僅僅存在于兩個(gè)線程的場(chǎng)景,在多個(gè)線程中也同樣存在。如果多個(gè)線程之間的依賴關(guān)系是環(huán)形,存在環(huán)路的依賴關(guān)系,那么也可能會(huì)發(fā)死鎖,如下圖所我們看到在這個(gè)例中,先線程 1 持有了鎖 A,然后線程 2 持有了鎖 B,然后線程 3 持有了鎖 C,現(xiàn)在每個(gè)線程都分別持有
3、把鎖。接下來線程 1 想要去持有鎖 B,可是它獲取不到,因?yàn)楝F(xiàn)在鎖 B 正在線程 2 的;接下來線程 2 去嘗試獲取鎖 C, 它同樣也獲取不到,因?yàn)楝F(xiàn)在鎖 C 在線程 3 的;然后線程 3 去嘗試獲取鎖 A ,當(dāng)然它也獲取不到,因?yàn)殒i A 現(xiàn)在在線程 1 的,這樣來線程1、線程 2 和線程 3 相互之間就形成了個(gè)環(huán),這就是在多線程中發(fā)死鎖的情況。所以不僅是兩個(gè)線程,多個(gè)線程同樣也有可能會(huì)發(fā)死鎖的情況死鎖的影響死鎖的影響在不同系統(tǒng)中是不樣的,影響的部分取決于當(dāng)前這個(gè)系統(tǒng)或者環(huán)境對(duì)死鎖的處理能數(shù)據(jù)庫(kù)中例如,在數(shù)據(jù)庫(kù)系統(tǒng)軟件的設(shè)計(jì)中,考慮了監(jiān)測(cè)死鎖以及從死鎖中恢復(fù)的情況。在執(zhí)個(gè)事務(wù)的時(shí)候可能需要獲取
4、多把鎖,并直持有這些鎖直到事務(wù)完成。在某個(gè)事務(wù)中持有的鎖可能在其他事務(wù)中也需要,因此在兩個(gè)事務(wù)之間有可能發(fā)死鎖的情況,旦發(fā)了死鎖,如果沒有外部涉,那么兩個(gè)事務(wù)就會(huì)永遠(yuǎn)的等待下去。但數(shù)據(jù)庫(kù)系統(tǒng)不會(huì)放任這種情況發(fā),當(dāng)數(shù)據(jù)庫(kù)檢測(cè)到這組事務(wù)發(fā)了死鎖時(shí),根據(jù)策略的不同,可能會(huì)選擇放棄某個(gè)事務(wù),被放棄的事務(wù)就會(huì)釋放掉它所持有的鎖,從使其他的事務(wù)繼續(xù)順利進(jìn)。此時(shí)程序可以重新執(zhí)被強(qiáng)終的事務(wù),這個(gè)事務(wù)現(xiàn)在就可以順利執(zhí)了,因?yàn)樗懈?jìng)爭(zhēng)資源的事務(wù)都已經(jīng)在剛才執(zhí)完畢,并且釋放資源了JVM 中在 JVM 中,對(duì)于死鎖的處理能就不如數(shù)據(jù)庫(kù)那么強(qiáng)了。如果在 JVM 中發(fā)了死鎖,JVM 并不會(huì)動(dòng)進(jìn)處理,所以旦死鎖發(fā),就會(huì)
5、陷窮的等待率不但危害死鎖的問題和其他的并發(fā)安全問題樣,是概率性的,也就是說,即使存在發(fā)死鎖的可能性,也并不是 100% 會(huì)發(fā)的。如果每個(gè)鎖的持有時(shí)間很短,那么發(fā)沖突的概率就很低,所以死鎖發(fā)的概率也很低。但是在線上系統(tǒng),可能每天有千萬次的“獲取鎖”、“釋放鎖”操作,在量的次數(shù)前,整個(gè)系統(tǒng)發(fā)問題的率就會(huì)被放,只要有某次操作是有風(fēng)險(xiǎn)的,就可能會(huì)導(dǎo)致死鎖的發(fā)也正是因?yàn)樗梨i“不定會(huì)發(fā)”的特點(diǎn),導(dǎo)致提前找出死鎖成為了個(gè)難題。壓測(cè)試雖然可以檢測(cè)出部分可能發(fā)死鎖的情況,但是并不以完全模擬真實(shí)、長(zhǎng)期運(yùn)的場(chǎng)景,因此沒有辦法把所有潛在可能發(fā)死鎖的代碼都找出來旦發(fā)了死鎖,根據(jù)發(fā)死鎖的線程的職責(zé)不同,就可能會(huì)造成系統(tǒng)崩
6、潰、性能降低甚整個(gè)系統(tǒng)崩潰等各種不良后果。且死鎖往往發(fā)在并發(fā)、負(fù)載的情況下,因?yàn)榭赡軙?huì)直接影響到很多戶,造成系列的問題。以上就是死鎖發(fā)率不但是危害的特點(diǎn)發(fā)死鎖的例/*/System.out.println(+Thread.currentThread().getName() + flag + flag);Thread.sleep(500);System.out.println( 1);synchronized (o2) try Thread.sleep(500); catch (Exception e) e.printStackTrace();synchronized (o1) System.o
7、ut.println( 2);public static void main(String argv) MustDeadLock r1 = new MustDeadLock();MustDeadLock r2 = new MustDeadLock();r1.flag = 1;r2.flag = 2;Thread t1 = new Thread(r1, t1);Thread t2 = new Thread(r2, t2);t1.start();t2.start();可以看到,在這段代碼中有個(gè) int 類型的 flag,它是個(gè)標(biāo)記位,然后我們新建了 o1 和 o2、作為 synchronized
8、的鎖對(duì)象在 run 法,它會(huì)先打印出當(dāng)前線程的名字,然后打印出當(dāng)前線程 flag 的值是多少如果 flag 等于 1,就會(huì)先獲取 o1 這把鎖,然后休眠 500 毫秒,再去嘗試獲取 o2 這把鎖并且打印出線程1獲得了兩把鎖如果 flag 等于 2,那么情況恰恰相反,線程會(huì)先獲取 o2 這把鎖,然后休眠 500 毫秒,再去獲取 o1 這把鎖,并且打印出線程2獲得了兩把鎖在 main 法中新建了兩個(gè)本類的實(shí)例,也就是兩個(gè) Runnable 對(duì)象,并且把它們的 flag 分別改為 1 和 2:r1 的 flag 設(shè)置為 1,r2 的flag 設(shè)置為 2。然后新建兩個(gè)線程,分別去執(zhí)這兩個(gè) Runnab
9、le 對(duì)象,執(zhí) r1 和 r2 這兩個(gè)線程的名字分別叫做 t1 和 t2,最后我們把兩個(gè)線程給啟動(dòng)起來程序的種執(zhí)結(jié)果t1flag1t2flag2這的重點(diǎn)就在于程序執(zhí)到此時(shí)還在繼續(xù)執(zhí),并沒停,并且它永遠(yuǎn)不會(huì)打印出“線程 1 獲得了兩把鎖”或“線程 2 獲得了兩把鎖”這樣的語句,此時(shí)這就發(fā)了死鎖對(duì)發(fā)死鎖這個(gè)過程進(jìn)分析當(dāng)?shù)?1 個(gè)線程運(yùn)的時(shí)候,它會(huì)發(fā)現(xiàn)的 flag 是 1 ,所以它會(huì)嘗試先獲得 o1 這把鎖,然后休眠 500 毫秒在線程 1 啟動(dòng)并休眠的期間,線程 2 同樣會(huì)啟動(dòng)起來。由于線程 2 的 flag 是 2,所以它會(huì)進(jìn)到下 的 if (flag = 2) 對(duì)應(yīng)的代碼塊中,然后線程 2 先會(huì)去獲取 o2 這把鎖。也就是說在線程 1 啟動(dòng)并獲取到 o1 這把鎖之后進(jìn)休眠的期間,線程 2 獲取到了 o2這把鎖,然后線程 2 也開始 500 毫秒的休眠。當(dāng)線程 1 的 500 毫秒休眠時(shí)間結(jié)束后,它將嘗試去獲取 o2 這把鎖,此時(shí) o2 這個(gè)鎖正被線程 2 持有,所以線程 1 法獲取到的 o2緊接著線程 2 也會(huì)蘇醒過來,它將嘗試獲取 o
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度杭州電子科技大學(xué)產(chǎn)學(xué)研合作項(xiàng)目合同
- 2025年度出租車司機(jī)培訓(xùn)與技能提升合同
- 2025年國(guó)際海上救助服務(wù)海運(yùn)貨物運(yùn)輸合同協(xié)議范本
- 2025年度綠色生態(tài)建設(shè)環(huán)保合同范本
- 2025年度企業(yè)并購(gòu)貸款續(xù)借合同模板
- 北京餐飲合伙合同范本
- 買賣山地合同范例
- vr制作合同范本
- 修路車輛租賃合同范例
- 出售翻新塔吊合同范本
- 咖啡店合同咖啡店合作經(jīng)營(yíng)協(xié)議
- 藥膳與食療試題及答案高中
- 北京市西城區(qū)2024-2025學(xué)年八年級(jí)上學(xué)期期末考試數(shù)學(xué)試卷含答案
- 2025年南京信息職業(yè)技術(shù)學(xué)院高職單招數(shù)學(xué)歷年(2016-2024)頻考點(diǎn)試題含答案解析
- 二零二五年度海外市場(chǎng)拓展合作協(xié)議4篇
- 2025年春新外研版(三起)英語三年級(jí)下冊(cè)課件 Unit4第2課時(shí)Speedup
- 2024年湖南汽車工程職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)標(biāo)準(zhǔn)卷
- 2025中國(guó)鐵塔集團(tuán)安徽分公司招聘29人高頻重點(diǎn)提升(共500題)附帶答案詳解
- 2025年河北省農(nóng)村信用社招聘歷年高頻重點(diǎn)提升(共500題)附帶答案詳解
- (正式版)HGT 6313-2024 化工園區(qū)智慧化評(píng)價(jià)導(dǎo)則
- 公共關(guān)系學(xué)完整教學(xué)課件
評(píng)論
0/150
提交評(píng)論