在多執行緒場景中,多個執行緒互相持有對方需要的鎖,從而造成了阻塞。嚴重影響了效能。
常見的死鎖:順序死鎖,動態死鎖**賬)
執行緒a占用o1鎖,想要占用o2鎖。執行緒b占用o2鎖,想要占用o1鎖。//順序死鎖的示例**。
public
class
test
}class
aextends
thread
public
void
run(
)catch
(interruptedexception e)
synchronized
(o2)}}
}class
bextends
thread
public
void
run(
)catch
(interruptedexception e)
synchronized
(o1)
}}
問題:執行緒b沒有釋放o2鎖那麼執行緒a就無法完成。執行緒a沒有釋放o1鎖,執行緒b也沒有辦法完成。就這樣造成了死鎖。
通過jstack分析執行緒的棧資訊; 或者使用threadmxbean相關的api在程式中列印出相關的死鎖資訊;
一、盡量不要巢狀鎖。
二、如果要使用巢狀鎖,注意順序關係。
三、對**進行審查,提前發現然後修正**。
執行緒死鎖詳解
多程序,多執行緒的併發執行雖然提公升了系統資源的利用率,提高了系統的效能,但是併發執行也帶來了新的問題 死鎖。死鎖是指多個程序 執行緒 在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象 互相掛起等待 若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠...
執行緒中的死鎖
所謂死鎖 是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去.此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等竺的程序稱為死鎖程序.由於資源占用是互斥的,當某個程序提出申請資源後,使得有關程序在無外力協助下,永遠分配不到必需的資源而...
執行緒中的死鎖
1.1 死鎖的概念 當兩個或多個執行緒需要相同資源,如果執行緒獲取不到其他資源,就會進入阻塞狀態,程式就會掛起.1.2 死鎖的前提 多執行緒 獲取相同資源 1.3 死鎖的條件 互斥條件 程序對於所分配的資源具有排它性,即乙個資源只能被乙個程序占用,直到被該程序釋放.請求和保持條件 乙個程序因請求被占...