1、 首先synchronized是Java內(nèi)置關(guān)鍵字,在JVM層面,Lock是個Java類;
2、 synchronized 可以給類、方法、代碼塊加鎖;而 lock 只能給代碼塊加鎖。
3、 synchronized 不需要手動獲取鎖和釋放鎖,使用簡單,發(fā)生異常會自動釋放鎖,不會造成死鎖;而 lock 需要自己加鎖和釋放鎖,如果使用不當(dāng)沒有 unLock()去釋放鎖就會造成死鎖。
4、 通過 Lock 可以知道有沒有成功獲取鎖,而 synchronized 卻無法辦到。