第七章 執行緒的活性故障

2021-10-01 18:37:54 字數 749 閱讀 3473

死鎖會導致相關執行緒一直被暫停使得其任務無法進展。產生死鎖的必要條件包括:資源互斥、資源不可搶占、占用並等待資源以及迴圈等待資源。我們可以通過檢視執行緒轉儲手工檢測死鎖,也可以利用threadmxbean.finddeadlockedthreads()方法進行死鎖的自動檢測。死鎖的規避方法包括:粗鎖法(使用乙個粗粒度的鎖代替多個鎖)、鎖排序法(相關執行緒使用全域性統一的順序申請鎖)、使用reentrantlock.trylock(long,timeunit)來申請鎖、使用開放呼叫(在呼叫外部方法時不加鎖)以及使用鎖的替代品。使用內部鎖或者使用lock.lock()申請的顯示鎖導致的死鎖是無法恢復的;使用lock.lockinterruptibly()申請的顯示鎖導致的死鎖理論上是可恢復的,但實際操作性不強——自動恢復的嘗試可能是徒勞且有害的(導致活鎖)。

鎖死是等待執行緒由於某種原因一直無法被喚醒而導致其任務無法進展的一種活性故障。訊號丟失鎖死是由於沒有相應的通知執行緒來喚醒等待執行緒而使等待執行緒一直處於等待狀態的一種活性故障。巢狀監視器鎖死是巢狀鎖導致通知執行緒無法獲得其為喚醒等待執行緒所需的鎖從而使其無法喚醒等待執行緒,最終使得通知執行緒與等待執行緒都一直處於等待狀態的一種活性故障。巢狀監視器鎖死可以通過檢視執行緒轉儲進行檢測。為規避巢狀監視器鎖死,我們應該避免在巢狀鎖的內層臨界區內實現等待/通知。

執行緒飢餓指執行緒一直無法獲得其所需的資源而導致其任務一直無法進展的一種活性故障。把鎖看成一種資源,那麼死鎖可被看作一種執行緒飢餓。飢餓可能演變成活鎖。

活鎖是執行緒一直在做無用功而使其任務一直無法進展的一種活性故障。試圖進行死鎖故障恢復可能導致活鎖。

第七章 多執行緒

1 乙個單cpu的機器,如何同時執行多個執行緒,請簡述其原理 2 呼叫執行緒物件的start 方法會執行run 方法,為什麼不直接呼叫run 方法 3.執行緒都生命週期包含幾種狀態,請描述每種狀態的特徵 4.編寫乙個程式建立兩個執行緒物件,每個執行緒輸出1到5的數。要求執行緒類分別使用繼承threa...

Java多執行緒(第七章)

1.blocked 阻塞 thread state for a thread blocked waiting for a monitor lock.2.new 新建 thread state for a thread which has not yet started.3.runnable 執行或就...

python第七章 python教程(第七章)

字典和集合 字典是python中唯一,乙個對映型別 如何建立乙個字典,如下 dict dict 滲透 網路安全 怎麼理解字典呢?現實生活中的字典可以通過首字母進行查詢要查詢的漢子,python也可以這樣理解,通過 前的元素查詢到冒號後的元素。為什麼說字典是唯一乙個對映型別呢?看圖。對映型別區別與序列...