package test1;
/*** 乙個簡單的死鎖類
* @author istar
* 當類的物件flag=1時(t1),先鎖定o1,睡眠500毫秒,然後鎖定o2;
* 而t1在睡眠的時候另乙個flag=0的物件(t2)執行緒啟動,先鎖定o2,睡眠500毫秒,等待t1釋放o1;
* t1睡眠結束後需要鎖定o2才能繼續執行,而此時o2已被t2鎖定;
* t2睡眠結束後需要鎖定o1才能繼續執行,而此時o1已被t1鎖定;
* t1、t2相互等待,都需要對方鎖定的資源才能繼續執行,從而死鎖。
*/ class deadlock implements runnable catch (exception e)
synchronized(o2) }}
if(flag == 0) catch (exception e)
synchronized(o1) }}
} public static void main(string args)
}
輸出結果:
flag=1
flag=0
死鎖的簡單總結
死鎖是指在一組程序中的各個程序均占有不會釋放的資源,但因互相申請被其他程序所站用不會釋放的資源而處於的一種永久等待狀態。一 死鎖產生的原因 1 因為系統資源不足,不能滿足程序的資源請求,會導致多個執行緒之間同時爭奪乙個資源。2 程序執行的順序不合適。3 資源分配不得當,有的程序分配的資源太少,會因為...
死鎖 簡單了解
1 什麼是死鎖 1.1 死鎖定義 死鎖是指兩個或兩個以上的執行緒在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。1.2 死鎖產生條件 1 互斥條件 某個資源某一時刻只能...
Java 死鎖的簡單例項
雖然網上有各種關於死鎖的說法,但是卻沒有乙個實際的案例來闡述這個死鎖到底是什麼樣的 那麼這裡有乙個簡單的死鎖例項 執行緒t1需要先使用掃瞄器掃瞄檔案 再使用印表機列印檔案,之後工作完畢 執行緒t2需要先使用印表機列印檔案 再使用掃瞄器掃瞄檔案,之後工作完畢 如果是正常的工作秩序,那應該是t1先擁有掃...