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