鎖的優化

1. 鎖的優化有哪些手段?java

    (1)下降 鎖 的範圍 例如:將方法上的鎖能夠加到 代碼快上安全

     (2)鎖分離:讀讀之間不須要同步,讀寫和寫寫之間才須要同步,例如:讀寫鎖多線程

              鎖分離延伸:只要操做互不影響,就能夠鎖分離,例如 LinkedBlockingQuene併發

     (3)減小鎖力度:將一個大對象拆分紅對個小對象,每一個小對象能夠被一個線程訪問,例子:CurrentHashMap性能

     (4)鎖粗化:爲了保證多線程間的有效併發,會要求每一個線程持有鎖的時間儘可能短,即在使用完 公共資源後,應該當即釋放鎖。只有這樣,等待在這個鎖上的其餘線程才能儘早的得到資源執行 任務。可是,凡事都有一個度,若是對同一個鎖不停的進行請求、同步和釋放,其自己也會消耗 系統寶貴的資源,反而不利於性能的優化優化

           例子:for循環中 鎖 加在循環外比 加載循環裏 好spa

       

public void demoMethod(){
    synchronized(lock){
    //do sth. }
    //作其餘不須要的同步的工做,但能很快執行完畢
    synchronized(lock){
    //do sth. } 
}

==》粗化:線程

 

==》粗化code

 

(5)鎖消除:在即時編譯器時,若是發現不可能被共享的對象,則能夠消除這些對象的鎖操做對象

            名稱:不可被共享的對象(方法中聲名的對象,且沒有越界:沒有將該對象return)

          例如:StringBuffer不可被共享,但StringBuffer是線程安全的,全部須要去掉鎖

          

2. 什麼是大對象?

答:多個線程須要同時訪問的對象

 

 

3. 鎖消除是在哪兒作?

答:在 JVM中

相關文章
相關標籤/搜索