死鎖:
思路:首先要有兩個物件口紅 lipstick 類 和鏡子 mirror 類
然後需要一件事情,比如都要去化妝 makeup 類繼承一下thread類重寫run方法,只有乙份資源(用static保證只有乙份),乙個口紅乙個鏡子。
我呢,先拿到了口紅,你呢,你先拿了鏡子。
1秒鐘以後我想拿鏡子,2秒後你想拿口紅,於是你們兩互相僵持,不想給對方。
於是啟動執行緒後,發現程式卡死了。
然後解決方法是不讓他飽對方的鎖,將鎖(synchronized同步塊)拿出來
1package
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,而此時如果缺少...