執行緒中的死鎖

2021-10-01 01:31:11 字數 1389 閱讀 8858

1.1 死鎖的概念

當兩個或多個執行緒需要相同資源,如果執行緒獲取不到其他資源,就會進入阻塞狀態,程式就會掛起.

1.2 死鎖的前提

多執行緒

獲取相同資源

1.3 死鎖的條件

互斥條件: 程序對於所分配的資源具有排它性,即乙個資源只能被乙個程序占用,直到被該程序釋放.

請求和保持條件: 乙個程序因請求被占用資源而發生阻塞時,對已獲取的資源保持不放.

不剝奪條件:任何乙個資源在沒有被該程序釋放時,任何其他程序都無法對其剝奪占用

迴圈等待條件:當發生死鎖時,所等待程序必定會形成乙個閉環(類似於死迴圈),造成永久阻塞

1.4 **實現

思路

1).:建立兩個鎖物件,用static修飾(即只建立一次物件)

2).:在run方法中巢狀同步

3).:分別啟動兩個執行緒執行if中**

上**:

//執行緒實現類**塊

private static object obj1 = new object();

private static object obj2 = new object();

boolean b = false;

public dieslock(boolean b)

@override

public void run()

}}else }}

}}

測試**塊

public static void main(string args)
1.5 如何避免死鎖

加鎖順序: 當多個執行緒需要相同的一些鎖,但是按照不同順序加鎖,死鎖就很容易發生.

如果能夠確保所有的執行緒都是按照相同的順序獲得鎖,那麼死鎖就不會發生.

加鎖實現 嘗試獲取鎖的時候加乙個超時時間,這也就意味著在嘗試獲取鎖的過程中若超過了這個時限該執行緒則放棄對該鎖請求。若乙個執行緒沒有在給定的時限內成功獲得所有需要的鎖,則會進行回退並釋放所有已經獲得的鎖,然後等待一段隨機的時間再重試。這段隨機的等待時間讓其它執行緒有機會嘗試獲取相同的這些鎖,並且讓該應用在沒有獲得鎖的時候可以繼續執行(譯者注:加鎖超時後可以先繼續執行幹點其它事情,再回頭來重複之前加鎖的邏輯)。

執行緒中的死鎖

所謂死鎖 是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去.此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等竺的程序稱為死鎖程序.由於資源占用是互斥的,當某個程序提出申請資源後,使得有關程序在無外力協助下,永遠分配不到必需的資源而...

多執行緒中的死鎖

一 死鎖 所謂死鎖是指多個執行緒因競爭資源而造成的一種僵局 互相等待 若無外力作用,這些程序都無法向前推進。二 如何避免死鎖 1 加鎖順序 執行緒按照一定的順序加鎖 本例就是採用這種方法 2 加鎖時限 執行緒嘗試獲取鎖的時候加上一定的時限,超過時限則放棄對該鎖的請求,並釋放自己占有的鎖 例如本例中的...

執行緒中的死鎖DeadLock

死鎖 死鎖是指在一組程序中的各個程序均占有不會釋放的資源,但因互相申請被其他程序所站用不會釋放的資源而處於的一種永久等待狀態。簡言之為多個程序互相佔著對方需要的資源,不肯釋放,形成僵持。產生死鎖的四個必要條件 1 互斥條件 乙個資源每次只能被乙個程序使用。2 請求與保持條件 乙個程序因請求資源而阻塞...