多執行緒死鎖

2021-07-09 03:15:15 字數 894 閱讀 6841

這段時間剛好學到多執行緒,下面是自己對死鎖的一些感悟,並不是我說的有多到位,只是想到一種更為通俗易懂理解方式,現在和大家一起分享一下,有改進的地方,希望大家多提提意見。

一、首先說一下死鎖的定義:由兩個或兩個以上的執行緒由於互相競爭資源,導致一種互相等待的狀態,如果沒有外力推動,則他們都無法進行下去。

那麼下面會用乙個例子來說明產生死鎖的幾個條件。

兩個主角(執行緒a和執行緒b):小王和小明  公用物品(共享資源):碗、筷子

小王佔據著碗,小明佔據著筷子,小王想去找小明拿筷子用,小明不給,同理,小明找小王借碗用,小王不給,均已失敗而告終,但是兩個人又都不願意放棄自己的東西,他們兩個又不能打架,去強行搶占對方的東西,然後就互相等待,你不給我,我不給你,最後都不能去吃飯。

下面再來說下產生死鎖的四個條件:

1、互斥條件:執行緒在某一時間內獨佔資源。

2、請求與保持條件:乙個執行緒在請求資源而阻塞的時候,又不原放棄自己的資源。

3、不剝奪條件:當執行緒已獲得資源的時候,在沒有使用完成之後,不能強行搶占資源

4、迴圈等待條件:若干執行緒形成一種頭尾相接的迴圈等待的關係。

有興趣的同學可以對我上面的例子做乙個標記:每乙個條件對應一段話,拆分成四段話。

二、解決方法:

1、那麼執行緒死鎖產生了,那麼我們要如何解決呢。

就拿我們生活中的例子來說:死鎖就像癌症,以我們現在的技術無法解決,我們唯一能做的就是預防。

2、如何預防呢,那就從會產生死鎖的幾個條件入手,還是以上面的例子。

(2)當小王從小明借筷子的時候,小明不借,那麼小王就放掉自己的碗,給小明用

(3)小明比小王強壯,當小王不借的時候,小明強行把碗搶過來

(3)既然都不給的話,那我就不等了

針對上面的預防辦法,在多執行緒**中都可以有對應的**實現,就先寫這麼多吧,謝謝大家!

多執行緒死鎖

1 提出 多執行緒與多程序提高了系統資源的利用率,然而併發執行也會帶來一些問題,如死鎖。2 概念 死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖...

多執行緒死鎖

演示一種死鎖的現象 實現如圖所示的死鎖 public classdeadlockimplementsrunnable else count 解釋 死鎖 cpu程序排程是隨機的,執行緒a執行,列印了幾遍if else,這中間,count為奇數,而且執行緒2搶奪了cpu 資源進入else,而此時如果缺少...

多執行緒死鎖

模擬死鎖的過程一 public class t system.out.println m1呼叫 private void m2 system.out.println m2呼叫 public static void main string args 該方法呼叫的過程可能會產生死鎖 該死鎖的方式為在m1...