多執行緒17 死鎖

2022-08-30 12:48:10 字數 1117 閱讀 7928

死鎖:

思路:首先要有兩個物件口紅 lipstick 類 和鏡子 mirror 類

然後需要一件事情,比如都要去化妝 makeup 類繼承一下thread類重寫run方法,只有乙份資源(用static保證只有乙份),乙個口紅乙個鏡子。

我呢,先拿到了口紅,你呢,你先拿了鏡子。

1秒鐘以後我想拿鏡子,2秒後你想拿口紅,於是你們兩互相僵持,不想給對方。

於是啟動執行緒後,發現程式卡死了。

然後解決方法是不讓他飽對方的鎖,將鎖(synchronized同步塊)拿出來

1

package

com.thread.syn;23

//死鎖:多個執行緒互相抱著對方需要的資源,然後形成僵持

4public

class

deadlock 12}

1314

//口紅

15class

lipstick

1819

//鏡子

20class

mirror

2324

//化妝

25class makeup extends

thread

3839

40@override

41public

void

run() catch

(interruptedexception e) 48}

4950

//化妝,互相持有對方的鎖,就是互相拿到對方的資源

51private

void makeup() throws

interruptedexception

57synchronized (mirror)

60 } else

65synchronized (lipstick) 68}

6970}71

72}7374

結果:75

灰姑涼獲得口紅的鎖

76白雪公主獲得鏡子的鎖

77灰姑涼獲得鏡子的鎖

78 白雪公主獲得口紅的鎖

死鎖避免方法

上面列出了死鎖的四個必要條件,我們只要想辦法破其中的任意乙個或多個條件就可以避免死鎖發生。

多執行緒死鎖

這段時間剛好學到多執行緒,下面是自己對死鎖的一些感悟,並不是我說的有多到位,只是想到一種更為通俗易懂理解方式,現在和大家一起分享一下,有改進的地方,希望大家多提提意見。一 首先說一下死鎖的定義 由兩個或兩個以上的執行緒由於互相競爭資源,導致一種互相等待的狀態,如果沒有外力推動,則他們都無法進行下去。...

多執行緒死鎖

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

多執行緒死鎖

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