syschronized和lock的區別性能
synchronized的鎖可重入、不可中斷、非公平,而Lock鎖可重入、可中斷、可公平、綁定多個Condition.(二者皆可重入)
synchronized是一個關鍵字 lock是一個接口是類
synchronized沒法得到所得狀態,屬於自動鎖,發生異常會自動釋放鎖
lock能夠得到鎖的狀態,手動鎖,發生異常不會自動釋放要在finally裏面本身手動釋放
synchronized是非公平鎖 lock是公平鎖
synchronized不可中斷 持有鎖線程一直不釋放,其餘只能阻塞等待 lock能夠設置時間進行放棄等待
優化
1)Synchronized保證內存可見性和操做的原子性
2)Volatile只能保證內存可見性
3)Volatile不須要加鎖
,比Synchronized更輕量級,並不會阻塞線程
(volatile不會形成線程的阻塞;synchronized可能會形成線程的阻塞)synchronized關鍵字是防止多個線程同時執行一段代碼,就會影響程序執行效率
,而volatile關鍵字在某些狀況下性能要優於synchronized
。
4)volatile標記的變量不會被編譯器優化,而synchronized標記的變量能夠被編譯器優化(如編譯器重排序的優化)
5)volatile是變量修飾符
,僅能用於變量
,而synchronized可用於類方法或代碼塊的修飾符
。spa