執行緒a和執行緒b相互等待對方持有的鎖導致程式無限死迴圈下去,要理解什麼是死鎖,首先要理解死鎖的形成步驟:
(1)兩個執行緒裡面分別持有兩個object物件:lock1和lock2。這兩個lock作為同步**塊的鎖;
(2)執行緒1的run()方法中同步**塊先獲取lock1的物件鎖,thread.sleep(3000),然後接著獲取lock2的物件鎖。這麼做主要是為了防止執行緒1啟動一下子就連續獲得了lock1和lock2兩個物件的物件鎖;
(3)執行緒2的run()方法中同步**塊先獲取lock2的物件鎖,接著獲取lock1的物件鎖,當然這時lock1的物件鎖已經被執行緒1鎖持有,執行緒2肯定是要等待執行緒1釋放lock1的物件鎖;
這樣,執行緒1「睡覺」結束,執行緒2已經獲取了lock2的物件鎖了,執行緒1此時嘗試獲取lock2的物件鎖,便被阻塞,此時乙個死鎖就形成了。
public
class
dealthread
implements
runnable
@override
public
void
run() catch(interruptedexception e)
synchronized(lock2)}}
if(username.equals("b"))catch(interruptedexception e)
synchronized(lock1)}}
}public
static
void
main(string args) catch (interruptedexception e) }}
程式執行結果如圖所示:
進入cmd控制台,再進入jdk的安裝資料夾中的bin目錄,執行jps命令,檢視如圖所示:
多執行緒死鎖
這段時間剛好學到多執行緒,下面是自己對死鎖的一些感悟,並不是我說的有多到位,只是想到一種更為通俗易懂理解方式,現在和大家一起分享一下,有改進的地方,希望大家多提提意見。一 首先說一下死鎖的定義 由兩個或兩個以上的執行緒由於互相競爭資源,導致一種互相等待的狀態,如果沒有外力推動,則他們都無法進行下去。...
多執行緒死鎖
1 提出 多執行緒與多程序提高了系統資源的利用率,然而併發執行也會帶來一些問題,如死鎖。2 概念 死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖...
多執行緒死鎖
演示一種死鎖的現象 實現如圖所示的死鎖 public classdeadlockimplementsrunnable else count 解釋 死鎖 cpu程序排程是隨機的,執行緒a執行,列印了幾遍if else,這中間,count為奇數,而且執行緒2搶奪了cpu 資源進入else,而此時如果缺少...