sponsored links

Java併發程式設計那些事兒(八)——死鎖

這是併發程式設計系列的第八篇文章。上一篇介紹了任務的取消及關閉,這一篇說一下死鎖的問題。

哲學家問題

一提到死鎖,很多人都會想到哲學家問題。假設有5個哲學家,圍坐在一張圓桌旁,哲學家只做兩件事,吃飯和思考。吃飯的時候需要使用兩隻筷子,但是每個哲學家面前只放了一支筷子,如果想吃飯,必須借用旁邊哲學家的筷子。

這個時候如何管理每個哲學家吃飯與思考的時機和順序就變得很重要。如果每個哲學家,拿起自己面前的筷子的時候,發現旁邊的筷子不可用時,並不是釋放手裡筷子,而是死等旁邊的筷子,就會發生死鎖。所有哲學家都會因為等待對方的筷子而餓死。

死鎖抽象模型

多個執行緒相互持有彼此正在等待的鎖而又不釋放自己已經持有的鎖時就會發生死鎖現象。對於上面的哲學家問題,筷子就是鎖,而每位哲學家就是一個執行緒。

如果非要對死鎖的場景做個簡單的分類的話,那麼大概可以分為如下幾類。

鎖順序死鎖

如果一個執行緒需要持有兩把鎖才能幹活。比如執行緒A先拿到1號鎖,然後再拿2號鎖,而這個時候執行緒B搶先持有了2號鎖,而等待持有1號鎖。這個時候將造成死鎖,造成這種死鎖的原因是因為兩個執行緒獲取鎖的順序錯亂了,如果都是按照先拿1號鎖,再拿2號鎖的順序執行,就不會發生死鎖情況。

資源死鎖

假設一個任務需要對兩個資料庫進行連線,兩個資料庫的連線物件都從對應的資料庫連線池中獲取。 當執行緒A持有資料庫1的連線,等待資料庫2的連線,而執行緒B持有資料庫2的連線,而等待資料庫1的連線,如果任意一個數據庫連結池資源不足,那麼也將發生死鎖現象。

執行緒飢餓

還有一種情況也會發生執行緒阻塞,假設我們定義了只有一個執行緒的執行緒池,但是我們提交了2個任務,第一個任務依賴於第二任務,但是因為第二個任務進入了等待佇列(只有一個執行緒執行任務)。所以整個程式將會被阻塞住。

如何避免死鎖

透過上面對死鎖問題的產生原因進行分析,我們大概可以想到有那麼幾種方式可以避免死鎖。 第一種方式就是避免持有多個鎖,但是這種情況只適合比較簡單的業務場景。 第二種方式就是使用帶有超時時間的顯示鎖Lock,在規定的時間內獲取不到相應的鎖資源時則自動釋放已經持有的鎖資源,這樣就可以避免長期持有鎖而形成死鎖。

結束

死鎖問題很難被發現,即便你經歷了嚴格的測試。死鎖問題往往發生在線上高併發的場景下。所以各位在寫併發程式的時候,一定要仔細分析業務需求及自己實現的程式碼邏輯。

分類: 軍事
時間: 2021-10-21

相關文章

厚積薄發!新疆軍區從去年開始全面換裝,盤點都有哪些新裝備

厚積薄發!新疆軍區從去年開始全面換裝,盤點都有哪些新裝備
一直以來,新疆軍區由於所處周邊國際環境相對和平,並不是我國的重點戰略方向,因此新疆軍區算是全軍裝備最為落後的一個軍區.不過隨著近些年印度公然在中印實控線附近部署重兵,並多次越境試圖蠶食我國領土,新疆軍 ...

抗壓路喜迎強力新裝備?改版“冰矛”不一般

抗壓路喜迎強力新裝備?改版“冰矛”不一般
大家好,我是策策. 寒霜襲侵自打來到峽谷就一直處於冷門,隨著S25新賽季的改動,這件裝備也迎來調整:新版寒霜襲侵的優劣勢分別在哪?射手真的需要嗎?它到底適合什麼英雄?接下來,我們就一步步解讀新版本的寒 ...

練練練!第72集團軍某旅瀕海訓練淬礪協同作戰硬功
第72集團軍某旅深入開展新裝備險難課目訓練 瀕海訓練淬礪協同作戰硬功 解放軍報訊 甘兆楠.何飛報道:仲秋時節,瀕海某地,戰車轟鳴.第72集團軍某旅數十輛新型突擊車在瀕海沙灘快速機動,突破層層障礙向預定 ...

除了勝利,我一無所求
邱麟輝.新華社發 "金頭盔""金飛鏢"雙料飛行員.空軍航空兵某旅"杜鳳瑞大隊"第26任大隊長邱麟輝,有著無數精彩而緊張的空戰記憶. 那年,& ...

模擬系統助力高原實彈發射
解放軍報訊 孫晨.特約記者馬振報道:9月下旬,高原戈壁,第76集團軍某旅組織某新型火箭彈發射演練.隨著火箭彈精準命中靶標,他們打出了高原地域首發命中的佳績.這一成績的取得,得益於該旅引入營連電子網路訓 ...

第81集團軍某合成旅:裝備換季走出“換油擦灰”舊模式

第81集團軍某合成旅:裝備換季走出“換油擦灰”舊模式
近日,筆者在第81集團軍某合成旅秋季武器裝備換季保養現場看到,官兵對不同型別裝備機械部件進行深度保養維護的同時,還對車載計算機.一體化指揮平臺.作戰訓練資料等資訊系統進行聯調聯試和系統維護. &quo ...

廣東宏遠再報銷一員大將,鋒線成為新短板,衛冕之旅或遭遼籃打斷

廣東宏遠再報銷一員大將,鋒線成為新短板,衛冕之旅或遭遼籃打斷
文/小楨 過去的幾天裡,廣東隊先是在U19男籃比賽中成功奪冠,然後在全運會U22男籃小組賽中實現了三連勝,成功晉級了半決賽,並且幾乎提前鎖定了一個決賽名額,還有不小的機率衝擊冠軍成功.比賽中,張昊.徐 ...

用光子晶體材料 為軍事裝備穿上多波段“隱身衣”

用光子晶體材料 為軍事裝備穿上多波段“隱身衣”
時家明教授(左三)帶領團隊攻關 張世初攝 國防科技大學電子對抗學院教授時家明團隊,20年來緊盯光子晶體這一前沿領域,先後攻克多項關鍵技術,研製出能同時防禦可見光.紅外.鐳射等多個波段偵察和制導的新型隱 ...

一個旅有多少人?步兵旅,混成旅,合成旅有何不同?

一個旅有多少人?步兵旅,混成旅,合成旅有何不同?
旅長是多大級別的官?能管多少人? 世人印象中大概停留在軍旗裡,司令可以吃掉軍長,軍長吃掉師長,師長可以吃掉旅長. 而旅長下面還可以吃掉團長,營長,連長,排長等等. 看來旅長也算是個不小的官? 確實,國 ...

還在找轟-20?航展已經給出答案,目前攻擊-11才是20家族新成員

還在找轟-20?航展已經給出答案,目前攻擊-11才是20家族新成員
空軍20家族四劍客,目前只集齊了三個,分別是我們所熟知的運-20.直-20.殲-20,但是另一款呼聲和人氣相當高的轟-20現在只聞其聲不見其人.秘密到極致時大家都想一探究竟,然後在第十三屆珠海航展到來 ...

第78集團軍某旅“突破烏江第一連”賡續血脈勇當先鋒
9月下旬,北疆某訓練場,第78集團軍某旅裝步五連正在進行戰鬥射擊考核.頃刻間,驟雨突至,現場能見度大幅下降. 風雨中,考核正常進行.只聽"轟"的一聲,1號車射手.連長郭祥衛率先按下 ...

韓跑跑確定豬八戒新面板,西遊記聯動王者榮耀出新面板?

韓跑跑確定豬八戒新面板,西遊記聯動王者榮耀出新面板?
王者榮耀這款遊戲大家應該都是比較熟悉的,S25賽季即將到來,遊戲裡面也是要上架很多新面板的,對於新面板各位覺得戰令活動確實非常划算,新賽季的戰令面板已經確定,一級戰令是后羿的聖弓遊俠,戰令星元面板是亞 ...

崑山隊新帥將點燃第一把火,昔日高堯愛將或成替補,曾是魯能功勳

崑山隊新帥將點燃第一把火,昔日高堯愛將或成替補,曾是魯能功勳
日前,崑山隊在悄無聲息中就做出了換帥調整.高堯在中甲第21輪帶領崑山FC以0比1輸給黑龍江隊之後,他就黯然下課.本輪崑山隊的比賽,實際上是新帥指揮的.崑山隊與四川九牛經過90分鐘的激戰,最終戰成了1比 ...

構建王府井商業新格局 推動線上線下融合互通

構建王府井商業新格局 推動線上線下融合互通
即將迎來66歲生日的王府井百貨大樓. 王府井百貨大樓某店鋪一角,售賣各種別具一格的小物件. 位於王府井百貨大樓內的王府井夢工廠店鋪.經濟日報記者 楊學聰攝 合併首商股份.掘金免稅業務.佈局環球影城-- ...

S25上線不到一天,典韋出新裝備已經無解!劍仙和策劃解讀新版本

S25上線不到一天,典韋出新裝備已經無解!劍仙和策劃解讀新版本
王者榮耀在今天上線了S25賽季,新的賽季很多玩家都還不太瞭解,大部分都還是按照上個賽季一樣打,這樣一來很多玩家沒有利用好新賽季的變化,給自己帶來最快的上分方式,那麼S25賽季中最快的上分方式是什麼呢? ...

氣死偶嘞!《元氣騎士》新武器“噴氣河豚”評測,鬼才涼屋回來了

氣死偶嘞!《元氣騎士》新武器“噴氣河豚”評測,鬼才涼屋回來了
大家好!我是元氣老騎士:元氣宅. 眾所周知,<元氣騎士>是一款會定期進行版本推送的畫素手遊,但每次臨近大版本更新之際,卻幾乎都是幾人歡喜幾人愁.導致這種問題的原因當然並非是遊戲內容低劣所致 ...

永不言敗的“特戰利刃”——記西部戰區陸軍某特戰旅營長劉近
[最美新時代革命軍人] 光明日報記者 劉小兵 光明日報通訊員 謝東萌 巍峨聳峙的賀蘭山下,一場紅藍對抗演練鏖戰正酣.一名紅軍指揮員帶領小分隊用一根滑降繩從崖頂飛身而下,悄無聲息抵近藍軍指揮所,旋即合力 ...

神經網路正在幫助預測和挑選對抗COVID-19的新藥物組合

神經網路正在幫助預測和挑選對抗COVID-19的新藥物組合
深度學習確定了用於治療SARS-CoV-2等病毒的協同藥物組合.COVID-19的生存威脅凸顯了開發針對新興健康問題的有效治療方法的迫切需求.深度學習給我們帶來的好處之一是能夠在它展開研究時修改條件, ...

新功能、新升級,一文帶你全方位瞭解威聯通NAS最新 QTS 5.0 系統

新功能、新升級,一文帶你全方位瞭解威聯通NAS最新 QTS 5.0 系統
前言 前不久,威聯通釋出了NAS使用者翹首以盼的全新QTS 5.0系統,相較4.X系統在系統核心.UI設計.安全機制.效能輔助等方面進行了全面升級,同時也新增了許多實用功能.用一句話概括就是:更流暢. ...

旅比華僑華人舉辦線下晩會慶祝中比建交50週年
來源:中國新聞網 中新網布魯塞爾10月10日電 (記者 德永健)在中比迎來建交50週年之際,旅比華僑華人9日線上下相聚,以一臺載歌載舞.中西合璧的文藝晚會祝福中比"友誼地久天長". ...