有助于提高鎖性能的幾點建議

有助于提高鎖性能的幾點建議

  1. 減少鎖持有的時間

    只在有必要的地方加鎖,這樣就能減少鎖的持有時間许起,增加系統(tǒng)的吞吐量

    例如:在sycnMethon中只有mutextMethon方法需要加鎖蒂教,如果other code1與other code2都是重量級方法的話揖庄,就會花費較長的CPU時間阿逃。如果在高并發(fā)的情況下骡男,就會導致等待的線程不斷增加。

    public synchronized void sycnMethon(){
        othercode1();
        mutextMethon();
        othercode2();
    }
    

    解決方案:只在mutextMethon方法上加鎖夭谤,這樣可以減少鎖沖突的可能性棺牧,從而提升系統(tǒng)的吞吐量。

    public void sycnMethon(){
        othercode1();
        synchronized(this){
            mutextMethon();
        }
        othercode2();
    }
    
  2. 減小鎖粒度

    所謂減小鎖粒度沮翔,就是縮小鎖定對象的范圍陨帆。

    ConcurrentHashMap與HashTable如何將一個HashMap改造成一個線程安全的Map,我們知道HashTable是鎖定整個對象采蚀,而ConcurrentHashMap是鎖定一個段(也就是Hash Map的一部分)疲牵。所以說ConcurrentHashMap鎖粒度比Hashtable小。

    讓我們來看一下ConcurrentHashMap怎樣減小鎖粒度的榆鼠。

    ConcurrentHashMap內部被分為多個小的HashMap纲爸,稱之為段。在默認情況下妆够,一個ConcurrentHashMap被分為16個段识啦,如果需要在其中添加一個表項,不是將整個HashMap加上鎖神妹,而是根據(jù)該項的hashCode得到該表項被放在那個段颓哮,然后對該段進行加鎖,并完成put操作鸵荠。如果在多線程的情況下進行put操作冕茅,只要被加入的表項不是在同一個段,線程間便可以達到真正的并行蛹找。

  3. 用讀寫分離鎖(ReadWriteLock)來代替獨占鎖

    在讀多少寫的情況下姨伤,讀寫鎖對系統(tǒng)很有好處。因為如果系統(tǒng)在讀寫數(shù)據(jù)的時候都用獨占鎖庸疾,那么讀與讀乍楚,讀與寫,寫與寫均不能做到并發(fā)届慈,并且需要等待徒溪,而讀操作不會影響到數(shù)據(jù)的完整性和一致性。因此金顿,在大部分情況下词渤,可以允許多線程同時讀,讀寫鎖體現(xiàn)了這個功能串绩。

  4. 鎖分離

    如果將讀寫鎖再進一步延申,那就是鎖分離芜壁。讀寫鎖根據(jù)讀寫操作功能上不同礁凡,進行了有效的鎖分離高氮。根據(jù)相似的分離思想,也可以對獨占鎖進行分離顷牌。一個典型的案例就是LinkedBlockingQueue的實現(xiàn)剪芍。其內部有兩把鎖,一把是去的數(shù)據(jù)的鎖窟蓝,一把是放入數(shù)據(jù)的鎖罪裹。他們分別在take()和put()方法上使用。

    /** Lock held by take, poll, etc */
    private final ReentrantLock takeLock = new ReentrantLock();
    
    /** Wait queue for waiting takes */
    private final Condition notEmpty = takeLock.newCondition();
    
    /** Lock held by put, offer, etc */
    private final ReentrantLock putLock = new ReentrantLock();
    
    /** Wait queue for waiting puts */
    private final Condition notFull = putLock.newCondition();
    

    雖然這兩個方法同時對當前隊列進行了修改操作运挫,但由于該隊列基于鏈表實現(xiàn)的状共,因此這兩個操作分別作用于隊列前端和尾端,兩者并不沖突谁帕。

    如果使用獨占鎖峡继,take和put操作不能真正的并發(fā),在運行時匈挖,他們會互相等待對方釋放鎖碾牌,這種情況下競爭比較激烈,會影響系統(tǒng)在高并發(fā)情況下的性能儡循。

  5. 鎖粗化

    如果對一個鎖不停的進行請求舶吗,同步和釋放,其本身也會消耗系統(tǒng)的資源择膝,反而不利于優(yōu)化誓琼。為此虛擬機對這種情況下,便會對所有鎖進行整合成對鎖的一次請求调榄,從而減少對鎖的請求次數(shù)踊赠。

    例如:

    public void demoMethon(){
        synchronized (lock){
            do sth
        }
        做其他不需要同步的工作,但能很快執(zhí)行完畢
            synchronized (lock){
            do sth
        }
    }
    

    上面代碼會被整合成這樣:

    public void demoMethon(){
        synchronized (lock){
            do sth
            做其他不需要同步的工作每庆,但能很快執(zhí)行完畢
            do sth
        }
    }
    
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末筐带,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子缤灵,更是在濱河造成了極大的恐慌伦籍,老刑警劉巖,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件腮出,死亡現(xiàn)場離奇詭異帖鸦,居然都是意外死亡,警方通過查閱死者的電腦和手機胚嘲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進店門作儿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人馋劈,你說我怎么就攤上這事攻锰×浪唬” “怎么了?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵娶吞,是天一觀的道長垒迂。 經常有香客問我,道長妒蛇,這世上最難降的妖魔是什么机断? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮绣夺,結果婚禮上吏奸,老公的妹妹穿的比我還像新娘。我一直安慰自己乐导,他們只是感情好苦丁,可當我...
    茶點故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著物臂,像睡著了一般旺拉。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上棵磷,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天蛾狗,我揣著相機與錄音,去河邊找鬼仪媒。 笑死沉桌,一個胖子當著我的面吹牛,可吹牛的內容都是我干的算吩。 我是一名探鬼主播留凭,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼偎巢!你這毒婦竟也來了蔼夜?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤压昼,失蹤者是張志新(化名)和其女友劉穎求冷,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體窍霞,經...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨居荒郊野嶺守林人離奇死亡匠题,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了但金。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片韭山。...
    茶點故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出钱磅,到底是詐尸還是另有隱情巩踏,我是刑警寧澤,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布续搀,位于F島的核電站,受9級特大地震影響菠净,放射性物質發(fā)生泄漏禁舷。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一毅往、第九天 我趴在偏房一處隱蔽的房頂上張望牵咙。 院中可真熱鬧,春花似錦攀唯、人聲如沸洁桌。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽另凌。三九已至,卻和暖如春戒幔,著一層夾襖步出監(jiān)牢的瞬間吠谢,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工诗茎, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留工坊,地道東北人。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓敢订,卻偏偏與公主長得像王污,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子楚午,可洞房花燭夜當晚...
    茶點故事閱讀 44,654評論 2 354