程式死鎖的基本原因
下面這三句話背下來面試很受用synchronize 關鍵字可以對**塊或方法進行修飾,而不能夠對於class以及變數進行修飾。
接下來的部分也背下來吧,蠻有用的
1與monitor 關聯的物件不能為空
❎錯誤程式❌
private
final object mutex = null ;
public
void syncmethod (
)}
mutex為null是個低階錯誤,每個物件和乙個monitor關聯,物件都為null,monitor更無從談起了。
2synchronize 的作用域太大
❎錯誤程式❌
public
static
class
task
implements
runnable
}
synchronized 關鍵字應該盡可能的作用域共享資源(資料)的讀寫作用域。
3 不同的monitor 企圖鎖相同的方法
❎錯誤程式❌
public
static
class
task
implements
runnable}}
public
static
void main (string [
]args)
}}
4多個鎖的交差導致死鎖
多個鎖交差容易造成死鎖,程式沒有任何錯誤輸出,就是不工作。
...
private
final object mutex_read =
newobject()
;private
final object mutex_write =
newobject()
;public
void read ()}
}public
void wtite ()}
}
synchronized 關鍵字修飾了同乙個例項物件的兩個不同方法,那麼與之對應的monitor是 this monitor ,兩個monitor是一致的。
synchronized 關鍵字修飾的同乙個類的兩個不同static 方法,那麼與之對應的monitor是 class monitor ,兩個monitor是一致的。
1交叉鎖可能導致出現死鎖
執行緒a持有r1的鎖等待r2的鎖,執行緒b持有r2的鎖等待r1的鎖。
2記憶體不足
當併發請求系統可用記憶體時,如果此時系統記憶體不足,則可能會出現死鎖的情況。 兩個執行緒t1 and t2 ,執行某項任務,t1已經獲取100m記憶體,t2獲取200m記憶體,如果執行每個執行緒單元都需要300m記憶體,但是剩餘可用記憶體剛好為200m,那麼兩個執行緒有可能都在等著彼此能釋放記憶體資源。
3一問一答式的資料交換
服務的開啟某個埠等待客戶端訪問,客戶端傳送請求立即等待接收服務端給的相應,由於某種原因服務端錯過了客戶端傳送的資訊,這時服務端與客戶端都等待彼此傳送資訊過來,造成死鎖。
4資料庫
行級鎖和表級鎖。
5檔案鎖
某個程序一直占用某個檔案,或者占用後沒有及時關閉資源都會造成其他執行緒的死鎖。
6死迴圈引起的死鎖
**處理不當進入死迴圈陷入假死狀態。
打卡第三天
基礎入門簡單c語言題目 1 the hardest problem ever 解答 先建立字元陣列,把不正確的字元一一給找出來,再用正確的字元替換他們 include include include char str 1000 int main if str i 69 str i 65 如果字元是a...
打卡第三天
dict字典 字典是一種可變容器模型,且可儲存任意型別物件,字典得每個鍵值對key value對用冒號 分割,每個鍵值對之間用逗號,分割,整個字典包括在花括號 中 建立d 字典的方法 訪問字典裡的值 dict print dict name dict name print dict age dict...
集訓第三天,打卡
今天訓練賽自己價效比搞了個k題,相對較水,也算做了點貢獻吧。有一條概率dp,戴老闆秒切,膜啊,覺得不錯,所以寫了來。題意是乙個棋盤,在上面隨機放旗子,問所有的列和行上至少有乙個棋子的期望是多少。顯然的概率dp,dp i j k 表示放了i個棋子,覆蓋了j行,k列的概率。當前狀態都可以由放i 1個棋子...