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

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

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

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

    多線程鎖機制的總結

    Posted on 2010-12-03 10:11 楊羅羅 閱讀(1841) 評論(0)  編輯  收藏 所屬分類: java.thread
    AQS中有一個state字段(int類型,32位)用來描述有多少線程獲持有鎖。在獨占鎖的時代這個值通常是0或者1(如果是重入的就是重入的次數),在共享鎖的時代就是持有鎖的數量。
    自旋等待適合于比較短的等待,而掛起線程比較適合那些比較耗時的等待。

    鎖競爭

    影響鎖競爭性的條件有兩個:鎖被請求的頻率和每次持有鎖的時間。顯然當而這二者都很小的時候,鎖競爭不會成為主要的瓶頸。但是如果鎖使用不當,導致二者都比較大,那么很有可能CPU不能有效的處理任務,任務被大量堆積。

    所以減少鎖競爭的方式有下面三種:

    1. 減少鎖持有的時間
    2. 減少鎖請求的頻率
    3. 采用共享鎖取代獨占鎖

    死鎖

    1.一種情況是線程A永遠不釋放鎖,結果B一直拿不到鎖,所以線程B就“死掉”了
    2.第二種情況下,線程A擁有線程B需要的鎖Y,同時線程B擁有線程A需要的鎖X,那么這時候線程A/B互相依賴對方釋放鎖,于是二者都“死掉”了。
    3.如果一個線程總是不能被調度,那么等待此線程結果的線程可能就死鎖了。這種情況叫做線程饑餓死鎖。比如說非公平鎖中,如果某些線程非常活躍,在高并發情況下這類線程可能總是拿到鎖,那么那些活躍度低的線程可能就一直拿不到鎖,這樣就發生了“饑餓死”。

    避免死鎖的解決方案是:
    1.盡可能的按照鎖的使用規范請求鎖,另外鎖的請求粒度要小(不要在不需要鎖的地方占用鎖,鎖不用了盡快釋放);
    2.在高級鎖里面總是使用tryLock或者定時機制(就是指定獲取鎖超時的時間,如果時間到了還沒有獲取到鎖那么就放棄)。高級鎖(Lock)里面的這兩種方式可以有效的避免死鎖。

    主站蜘蛛池模板: 精品国产亚洲一区二区三区在线观看| 亚洲精品无码久久久久| 亚洲精品高清国产麻豆专区| 中文无码成人免费视频在线观看 | 亚洲综合色成在线播放| 国产精品亚洲综合天堂夜夜| 日韩高清在线免费看| 国产亚洲人成在线播放| 亚洲成?Ⅴ人在线观看无码| 免费无码午夜福利片 | 久久成人a毛片免费观看网站| 亚洲乱色熟女一区二区三区丝袜| 国产精品免费久久久久影院| 亚洲人色婷婷成人网站在线观看 | 日本免费人成在线网站| 亚洲国产精品成人综合色在线婷婷| 国产成人精品免费视频网页大全| 亚洲制服丝袜在线播放| 妞干网免费视频观看| 亚洲a无码综合a国产av中文| 亚洲国产一区视频| 成全高清在线观看免费 | 亚洲免费一级视频| 午夜高清免费在线观看| 免费看黄网站在线看| 亚洲色无码一区二区三区| 久久99精品国产免费观看| 50岁老女人的毛片免费观看 | 亚洲国产美女精品久久久| 色欲色香天天天综合网站免费| 久久99亚洲网美利坚合众国| 国产精品99爱免费视频| 久久91亚洲精品中文字幕| 99久久久精品免费观看国产| 青青青亚洲精品国产| 久久亚洲伊人中字综合精品| 亚洲三级高清免费| 有码人妻在线免费看片| 78成人精品电影在线播放日韩精品电影一区亚洲 | 免费观看一区二区三区| 亚洲中文字幕久在线|