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