<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 11, comments - 9, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

    記錄一個NonFairSync問題(死鎖問題)(LeftRighLock)

    Posted on 2012-06-16 22:22 steven.cui 閱讀(505) 評論(0)  編輯  收藏 所屬分類: java

    業務上線后,在有大量并發后,出現了一個線程完全被占用的問題,后來通過得到jvm堆棧信息(kill -3)看出來是死鎖問題。

    由于業務邏輯代碼實在比較復雜,此處濾掉業務代碼把線程競爭關系展示出來:

    1線程———>獲得A鎖———>獲得B鎖———>釋放B鎖————>釋放A鎖

    2線程———>獲得A鎖———>釋放A鎖

    3線程-——————>獲得B鎖———>獲得A鎖


    問題就出在1和3線程之間的AB鎖嵌套導致死鎖問題,1線程在沒有獲得B鎖的時候,3線程開始獲得B鎖然后又得到了A鎖,這時候就完全釋放不了A鎖了,死鎖產生了。

    由于時間關系,問題是理清楚了,只要刪掉1線程的A鎖就可以了,當時還是仔細了解過是否刪除1線程A鎖,發現對業務A鎖是沒必要的。但是線程2會不會也會像剛才一樣產生線程死鎖呢?不會,因為線程2里并不會得到B鎖。

    1線程———>獲得B鎖———>釋放B鎖

    2線程-——————————>獲得A鎖————>釋放A鎖

    3線程———>獲得B鎖———>獲得A鎖————>釋放A鎖————>釋放B鎖


    問題是死鎖,但暴露了兩部分問題:

    1.過早的認為自己能控制好競爭關系,對線程間的競爭過早的做出了判斷

    2.每多設計一個鎖就增加了一個競爭的因素,盡量小心,一個鎖就有可能是一個地雷,一不小心就可能導致嚴重的問題。


    《java并發編程實踐》這本書中介紹過LeftRightLock,詳細了解這個問題的朋友可以去查下這本書的第十章 避免活躍性危險

    此書極其詳細的介紹了LeftRightLock出現的可能,有可能是因為自己編寫程序的疏忽導致,或者由于對鎖的認識不足導致,諸多原因都能找到解釋。

    主站蜘蛛池模板: 亚洲AV色无码乱码在线观看| 亚洲AV综合色区无码二区偷拍| 狠狠综合亚洲综合亚洲色| 无限动漫网在线观看免费| 亚洲欧洲日产国码在线观看| 97碰公开在线观看免费视频| 亚洲精彩视频在线观看| 免费福利视频导航| 亚洲 日韩经典 中文字幕| 无码专区永久免费AV网站| 亚洲精品伦理熟女国产一区二区 | jizzjizz亚洲日本少妇| 午夜dj免费在线观看| 美女黄网站人色视频免费| 亚洲福利精品一区二区三区| 亚洲一级片免费看| 亚洲av无码一区二区三区乱子伦 | 黄色成人网站免费无码av| 欧美色欧美亚洲另类二区| 亚洲国产成人精品久久久国产成人一区二区三区综 | 亚洲高清美女一区二区三区| 在线观看H网址免费入口| 精品国产日韩久久亚洲| 伊人久久亚洲综合影院| a级毛片免费高清毛片视频| 久久丫精品国产亚洲av不卡| 国产成人免费爽爽爽视频| 老司机午夜在线视频免费| 国产亚洲色婷婷久久99精品| 免费观看无遮挡www的小视频| 欧美色欧美亚洲另类二区| 亚洲精品狼友在线播放| 久久久久久久免费视频| 污网站在线免费观看| 99亚洲精品高清一二区| 国产成人高清精品免费软件| 麻豆精品成人免费国产片| 亚洲色大成网站www尤物| 亚洲午夜久久久久久久久电影网| 四虎永久在线精品免费观看视频| 牛牛在线精品观看免费正|