關於死鎖的一些小概念
死鎖是指兩個或兩個以上的程序在執行過程中,由於競爭資源或者由於彼此通訊而造成的一種阻塞的現象,若無外力作用,它們都將無法推進下去。此時稱系統處於死鎖狀態或系統產生了死鎖,這些永遠在互相等待的程序稱為死鎖程序。
就我個人而言,我喜歡將死鎖叫做執行緒版的鷸蚌相爭.
1.產生原因(複製的)
(1) 因為系統資源不足。如果系統資源充足,程序的資源請求都能夠得到滿足,死鎖出現的可能性就很低,否則(2).程序執行推進的順序不合適。
(3) 資源分配不當等。
就會因爭奪有限的資源而陷入死鎖。其次,程序執行推進順序與速度不同,也可能產生死鎖。
2.產生的四大條件(複製的)
(1) 互斥條件:乙個資源每次只能被乙個程序使用。這四個條件是死鎖的必要條件,只要系統發生死鎖,這些條件必然成立,而只要上述條件之(2) 請求與保持條件:乙個程序因請求資源而阻塞時,對已獲得的資源保持不放。
(3)不剝奪條件:程序已獲得的資源,在末使用完之前,不能強行剝奪。
(4) 迴圈等待條件:若干程序之間形成一種頭尾相接的迴圈等待資源關係。
一不滿足,就不會發生死鎖。
3.如何避免
理解了死鎖的原因,尤其是產生死鎖的四個必要條件,就可以最大可能地避免、預防和個人寫的簡單案例解除死鎖。所以,在系統設計、程序排程等方面注意如何不讓這四個必要條件成立,如何確
定資源的合理分配演算法,避免程序永久佔據系統資源。此外,也要防止程序在處於等待狀態
的情況下占用資源。因此,對資源的分配要給予合理的規劃。
public
class deaththreaddemo
}class deadlock implements runnable
public
void
run()
} catch (interruptedexception e)
synchronized(o2)}}
if(value==1)
} catch (interruptedexception e)
synchronized(o1)}}
}}
執行結果:
個人解釋:
死鎖的案例
死鎖就是當有兩個或兩個以上的執行緒都獲得對方的資源,但彼此有不肯放開,處於僵持狀態,此時便造成了死鎖 package cn.et.deadlock public class deadlock implements runnable catch interruptedexception e synch...
Lock死鎖的案例
死鎖 執行緒a和執行緒b相互等待對方持有的鎖導致程式無限死迴圈下去 1 兩個執行緒裡面分別持有兩個object物件 lock1和lock2。這兩個lock作為同步 塊的鎖 2 執行緒1的run 方法中同步 塊先獲取lock1的物件鎖,thread.sleep 然後接著獲取lock2的物件鎖。這麼做主...
死鎖案例分析
死鎖的產生以及解決辦法,看 分析,注意裡邊的注釋,自行執行。package thread 模擬買票 author yhl class thread02 implements runnable else 同步 塊 public void sale catch interruptedexception ...