最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java并發(fā)編程死鎖定義及如何避免死鎖

 更新時間:2022年02月09日 10:47:42   作者:Alpinist?Wang  
這篇文章主要為大家介紹了java并發(fā)編程中死鎖的詳細說明及如何避免死鎖的方法,有需要的朋友可以借鑒參考下希望能夠有所幫助,祝大家多多進步

場景模擬分析

場景一:狹路相逢

在星期天的早上十點半,你在公路上開著車,這是一條窄路,只能容納一輛車。這時,迎面又駛來一輛車,你們都走到一半,誰也不想倒回去,于是各不相讓。陷入無盡的等待。

場景二:冷戰(zhàn)

你和她吵架了,誰也不理誰,甚至晚飯時間都各自煮飯。你在炒京醬肉絲,她在做蔥烤鯽魚。炒到一半你發(fā)現(xiàn)小蔥被她全部拿走了,于是你默默等待她做好菜后再去拿。殊不知她也在等待你炒完菜后來拿醬油。

場景三:哲學(xué)家就餐

你和四個好朋友坐在圓形餐桌旁,你們只做兩件事情:吃飯,或者思考。吃飯的時候,你們就停止思考。思考的時候,也停止吃飯。每個人面前有一碗蘭州炒飯。并且每個人左右兩邊各有一根筷子。你們必須要拿到兩根筷子才能開始吃飯。吃完后再放下筷子,讓別人可以使用。吃了一會之后,每個人都拿起了自己左手邊的筷子,導(dǎo)致每個人都只有一根筷子,并且等待別人吃完放下筷子給自己。可惜,沒有人吃到飯,所以沒有人會放下筷子。(著名的哲學(xué)家就餐問題)

場景四:競爭資源

你有兩個線程 A 和 B ,各自在加鎖的狀態(tài)下運行。 A 持有一部分資源,并且等待 B 線程中的資源以完成自己的工作,而此時 B 線程也在等待 A 中的資源以完成自己的工作。由于他們都是鎖定狀態(tài),所以他們必須完成了自己的工作后,自己持有的資源才能釋放。于是線程無休止的等待,導(dǎo)致死鎖。

死鎖是什么?

上述四個場景都是程序員在工作或生活中會遇到的問題,人生就像是一個進程,時間是我們的主線程,期間做的每一件事都是開啟的一個子線程。當多件事沖突時,并發(fā)問題就產(chǎn)生了。以上場景都指向同一類并發(fā)問題:死鎖。

當兩個以上的運算單元,雙方都在等待對方停止運行,以獲取系統(tǒng)資源,但是沒有一方提前退出時,就稱為死鎖。

產(chǎn)生死鎖的的四個條件如下:

1、互斥條件:一個資源每次只能被一個進程使用;

2、請求與保持條件:一個進程因請求資源而阻塞時,對已獲得的資源保持不放;

3、不剝奪條件:進程已獲得的資源,在沒使用完之前,不能強行剝奪;

4、循環(huán)等待條件:多個進程之間形成一種互相循環(huán)等待資源的關(guān)系。

并發(fā)帶來壓力,有的人或有的程序,會因為承受不住壓力而崩潰,情緒崩潰和程序崩潰沒什么兩樣。當然,不論是做人還是寫程序,面對問題時,正確的做法都應(yīng)是采取策略,解除死鎖。

如何避免死鎖?

死鎖一旦發(fā)生,便無法解除。我們能做的只能盡量避免死鎖。要避免死鎖,只需破壞產(chǎn)生死鎖的四個條件之一即可。

方案一:破壞不剝奪條件

你想起書中所言:退一步海闊天空。但你也深知公平好過忍讓。正值周賽時間,你搖下車窗,對對面的兄弟喊道:咱來比賽一場力扣周賽,誰輸了誰倒出去讓另一個人過吧!于是你們打開力扣,開始答題。半小時后,你憑借高超的代碼水平 AC 了全部題目。對面司機對你拱手道:技不如人,甘拜下風(fēng)。于是他倒了回去,讓出了自己的一半路。最終你們都得以順利通行。

破壞不剝奪條件:讓對面的司機放棄了自己已有的資源。

方案二:破壞請求與保持條件

你在炒菜時發(fā)現(xiàn)沒有小蔥,于是你換位思考,想到她會不會也缺少自己用著的材料。雖然她還在和你冷戰(zhàn),但你勸解自己一個大老爺們不應(yīng)該和女孩子置氣,于是你主動把自己用著的所有材料拿給了她。她感受到你設(shè)身處地為她著想,大為感動,你們和好如初。之后她為你們兩個人一起炒了京醬肉絲和蔥烤鯽魚。

破壞請求與保持條件:在自己需要的材料缺少時,主動放棄自己持有的資源,防止出現(xiàn)互相等待。

方案三:破壞循環(huán)等待條件

你和你的朋友們決定給筷子編上號:1~5。規(guī)定每個人拿筷子時必須先拿到自己兩邊的筷子中號碼小的那一根,再去拿號碼大的那一根。如果小的那一根沒有拿到,不能先拿大的。當你們開始吃飯時,由于數(shù)字 5 不可能被一個人單獨拿到。因為他旁邊的另一根筷子編號必定比 5 小,所以不會再出現(xiàn)每個人都拿著一根的無限等待情形。

破壞循環(huán)等待條件:由于筷子指定了編號和獲取規(guī)則,所以每個鎖定狀態(tài)都將按照順序執(zhí)行,于是便杜絕了環(huán)路等待條件。

方案四:破壞互斥條件

你在運行兩個線程前,預(yù)先將線程 A 和 B 中的資源拷貝一份,讓他們不需互相等待對方的資源,于是兩個線程都得以順利運行。

破壞互斥條件:由于每次使用時都拷貝一份,所以一個資源可以被多個進程使用。

以上就是java并發(fā)編程死鎖定義及如何避免死鎖的詳細內(nèi)容,更多關(guān)于java死鎖及避免的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • SpringBoot中HTTP請求不通的原因級解決方法

    SpringBoot中HTTP請求不通的原因級解決方法

    HTTP 請求是指從客戶端到服務(wù)器的請求消息,對于一個 Spring Boot 項目而言,服務(wù)器就是 Spring Boot,客戶端就是用戶本地的瀏覽器,但是會遇到SpringBoot HTTP請求不通的問題,本文介紹了一些常見問題及解決方法,需要的朋友可以參考下
    2025-02-02
  • Spring?Boot?根據(jù)配置決定服務(wù)(集群、單機)是否使用某些主件的操作代碼

    Spring?Boot?根據(jù)配置決定服務(wù)(集群、單機)是否使用某些主件的操作代碼

    這篇文章主要介紹了Spring?Boot根據(jù)配置決定服務(wù)(集群、單機)是否使用某些主件,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2025-04-04
  • 教你怎么用Java獲取國家法定節(jié)假日

    教你怎么用Java獲取國家法定節(jié)假日

    這篇文章主要介紹了教你怎么用Java獲取國家法定節(jié)假日,文中有非常詳細的代碼示例,對正在學(xué)習(xí)java的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-04-04
  • 解析ConcurrentHashMap:成員屬性、內(nèi)部類、構(gòu)造方法

    解析ConcurrentHashMap:成員屬性、內(nèi)部類、構(gòu)造方法

    ConcurrentHashMap是由Segment數(shù)組結(jié)構(gòu)和HashEntry數(shù)組結(jié)構(gòu)組成。Segment的結(jié)構(gòu)和HashMap類似,是一種數(shù)組和鏈表結(jié)構(gòu),今天給大家普及java面試常見問題---ConcurrentHashMap知識,一起看看吧
    2021-06-06
  • javaweb實戰(zhàn)之商城項目開發(fā)(三)

    javaweb實戰(zhàn)之商城項目開發(fā)(三)

    這篇文章主要針對javaweb商城項目開發(fā)進行實戰(zhàn)演習(xí),主要實現(xiàn)通用的BaseDao.java和使用resultMap映射關(guān)聯(lián)對象,感興趣的小伙伴們可以參考一下
    2016-02-02
  • springboot加載不到nacos配置中心的配置問題處理

    springboot加載不到nacos配置中心的配置問題處理

    這篇文章主要介紹了springboot加載不到nacos配置中心的配置問題處理,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2025-06-06
  • eclipse+myeclipse 環(huán)境配置方法

    eclipse+myeclipse 環(huán)境配置方法

    eclipse+myeclipse配置環(huán)境
    2009-07-07
  • 詳解slf4j+logback在java工程中的配置

    詳解slf4j+logback在java工程中的配置

    這篇文章主要介紹了slf4j+logback在java工程中的配置,對日志組件logback也進行了簡單介紹,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2015-08-08
  • Spring注解之Service用法及示例詳解

    Spring注解之Service用法及示例詳解

    使用 @Service 注解可以將一個類聲明為業(yè)務(wù)邏輯組件,并將其對象存入 Spring 容器中,在控制器類中,通過注入該組件的實例,即可調(diào)用其中的方法,這篇文章主要介紹了Spring注解之Service用法及示例詳解,需要的朋友可以參考下
    2024-04-04
  • JUnit單元測試入門必看篇

    JUnit單元測試入門必看篇

    下面小編就為大家分享一篇JUnit單元測試入門必看篇,對新手而言有很好的參考價值,希望對大家有所幫助
    2017-11-11

最新評論

晴隆县| 博兴县| 会理县| 揭阳市| 临武县| 隆林| 子长县| 江北区| 湘潭县| 三明市| 罗江县| 津南区| 江都市| 宁津县| 佛冈县| 永和县| 平昌县| 龙川县| 哈密市| 高邮市| 瑞安市| 贵南县| 武冈市| 大名县| 德兴市| 灵台县| 大同市| 南充市| 内黄县| 珲春市| 三河市| 天柱县| 德安县| 嘉荫县| 马山县| 阜新市| 微博| 运城市| 平乐县| 色达县| 万全县|