1.首先synchronized是java內置關鍵字,在jvm層面,Lock是個java接口;
2.synchronized無法判斷是否獲取鎖的狀態,Lock可以判斷是否獲取到鎖;
3.synchronized會自動釋放鎖(a 線程執行完同步代碼會釋放鎖 ;b 線程執行過程中發生異常會釋放鎖),Lock需在finally中手工釋放鎖(unlock()方法釋放鎖),否則容易造成線程死鎖;
4.synchronized需要使用Object的wait,notify等方法實現喚醒等待,而lock通過面向對象的Condition實現.
5.synchronized的鎖可重入、不可中斷、非公平,而Lock鎖可重入、可判斷、可公平(兩者皆可)
6.Lock鎖適合大量同步的代碼的同步問題,synchronized鎖適合代碼少量的同步問題。
7.Lock被稱為顯式鎖,出現在jdk1.5,,synchronized稱為隱式鎖,出現在jdk1.0,lock的效率更高.