- Lock是個接口;synchronized是Java中的關鍵字,內置語言實現
- synchronized發生異常時,會自動釋放線程佔有的鎖,所以不會發生異常死鎖;lock發生異常時,若是沒有主動經過unlock()方法釋放鎖,那麼就會一直佔用鎖,發生死鎖,所以須要在finally塊中釋放鎖
- lock能夠讓等待鎖的線程響應中斷;synchronized不行,等待的線程會一直等待下去
- 經過lock能夠知道有沒有成功獲取鎖;synchronized不行
- lock能夠提升多個線程進行讀操做的效率。
補充:
從性能上來講,若是競爭資源不激烈,二者性能是差很少的;但競爭很是激烈時,此時lock的性能要遠遠高於synchronized。性能