如果乙個程序集合裡面的每個程序都在等待這個集合中的其他乙個程序(包括自身)才能繼續往下執行,若無外力他們將無法推進,這種情況就是死鎖,處於死鎖狀態的程序稱為死鎖程序
/**
* 乙個簡單的死鎖類
* 當deadlock類的物件flag==1時(td1),先鎖定o1,睡眠500毫秒
* 而td1在睡眠的時候另乙個flag==0的物件(td2)執行緒啟動,先鎖定o2,睡眠500毫秒
* td1睡眠結束後需要鎖定o2才能繼續執行,而此時o2已被td2鎖定;
* td2睡眠結束後需要鎖定o1才能繼續執行,而此時o1已被td1鎖定;
* td1、td2相互等待,都需要得到對方鎖定的資源才能繼續執行,從而死鎖。
*/
public class deadlock implements runnable catch (exception e)
synchronized (o2)
}
}
if (flag == 0) catch (exception e)
synchronized (o1)
}
}
}
public static void main(string args) }
總結下產生死鎖的條件:
(1) 互斥條件:即系統分配的程序中,其他執行緒不允許訪問,只能等待
(2)程序獲得一定的資源之後,又對其他資源發出請求,但是該資源可能被其他程序占有,此事請求阻塞,但又對自己獲得的資源保持不放
(3)是指程序已獲得的資源,在未完成使用之前,不可被剝奪,只能在使用完後自己釋放
(4):是指程序發生死鎖後,必然存在乙個程序--資源之間的環形鏈
執行緒的死鎖
死鎖的必要條件 1.互斥 每個資源要麼已經分配給了乙個程序,要麼就是可用的 2.占有和等待 已經得到了某個資源的程序可以再請求新的資源。3.不可搶占 已經分配給乙個程序的資源不能強制性的被搶占,它只能被占有他的程序顯式的釋放 處理死鎖的方法 1.鴕鳥策略 就是忽略死鎖,假裝什麼都沒有發生。死鎖的檢測...
執行緒的死鎖
前天俺們談到了加鎖,但是在使用加鎖的同時又會帶來乙個問題,就是死鎖。什麼叫死鎖?所謂死鎖 是指兩個或兩個以上的程序在執行過程中,因爭奪資源而造成的一種互相等待的現象,若無外力作用,它們都將無法推進下去。那麼為什麼會產生死鎖呢?1.因為系統資源不足。2.程序執行推進的順序不合適。3.資源分配不當。學過...
執行緒的同步,死鎖
同步就是協同步調,按預定的先後次序進 運 如 你說完,我再說。同 字從字 上容易理解為 起動作 其實不是,同 字應是指協同 協助 互相配合。例如 如程序 執行緒同步,可理解為程序或執行緒a和b 塊配合,a執 到 定程度 時要依靠b的某個結果,於是停下來,示意b運 b依 執 再將結果給 a a再繼續操...