死鎖及解決方法

2021-10-02 16:30:10 字數 1178 閱讀 5243

死鎖的概念

\quad

「死鎖」指的是:

\quad

多個執行緒各自占有一些共享資源,並且互相等待其他執行緒占有的資源才能進行,而導致兩個或者多個執行緒都在等待對方釋放資源,都停止執行的情形。

\quad

因此, 某乙個同步塊需要同時擁有「兩個以上物件的鎖」時,就可能會發生「死鎖」的問題。下面案例中,「化妝執行緒」需要同時擁有「鏡子物件」、「口紅物件」才能執行同步塊。那麼,實際執行時,「玉子的化妝執行緒」擁有了「鏡子物件」,「千反田的化妝執行緒」擁有了「口紅物件」,都在互相等待對方釋放資源,才能化妝。這樣,兩個執行緒就形成了互相等待,無法繼續執行的「死鎖狀態」。

public

class

deadlock

}class

lipstck

class

mirror

class

markup

extends

thread

@override

public

void

run(

)//相互持有對方的物件鎖-->可能造成死鎖

private

void

markup()

catch

(interruptedexception e)

synchronized

(mirror)}}

else

catch

(interruptedexception e)

synchronized

(stick)}}

}}

\quad

死鎖是由於「同步塊需要同時持有多個物件鎖造成」的,要解決這個問題,思路很簡單,就是:同乙個**塊,不要同時持有兩個物件鎖。

改一下markup()方法,把鎖中鎖拿到外邊:

private

void

markup()

catch

(interruptedexception e)

}synchronized

(mirror)

}else

catch

(interruptedexception e)

}synchronized

(stick)

}}

死鎖現象及解決方法

死鎖現象 過多的同步可能造成相互不釋放資源 先定義兩個類,乙個口紅,乙個鏡子 class lipstick class mirror 化妝類 g0在鎖lipstick後又想鎖住mirror,g1在鎖住mirror後又想鎖住lipstick,當兩個同時都想擁有對方的鎖的時候,就會出現死鎖的現象。pub...

死鎖解決方法

死鎖是程序併發執行過程中可能出現的現象,哲學家就餐問題是描述死鎖的經典例子。為了防止死鎖,可以採用資源預分配法或者資源按序分配法。資源預分配法是指程序在執行前一次性地向系統申請它所需要的全部資源,如果系統當前不能夠滿足程序的全部資源請求,則不分配資源,此程序暫不投入執行,如果系統當前能夠滿足程序的全...

java 死鎖現象及解決方法

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