百天打卡第三天 執行緒安全

2021-10-07 15:02:28 字數 1719 閱讀 8053

程式死鎖的基本原因

下面這三句話背下來面試很受用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個棋子...