Synchronized和Lock的區別
synchronized
關鍵字和java.util.concurrent.locks.Lock
都能加鎖,兩者有什麼區別呢?
- 原始構成:
sync
是JVM層面的,底層通過monitorenter
和monitorexit
來實現的。Lock
是JDK API層面的。(sync
一個enter會有兩個exit,一個是正常退出,一個是異常退出) - 使用方法:
sync
不需要手動釋放鎖,而Lock
需要手動釋放。 - 是否可中斷:
sync
不可中斷,除非拋出異常或者正常運行完成。Lock
是可中斷的,通過調用interrupt()
方法。 - 是否爲公平鎖:
sync
只能是非公平鎖,而Lock
既能是公平鎖,又能是非公平鎖。 - 綁定多個條件:
sync
不能,只能隨機喚醒。而Lock
可以通過Condition
來綁定多個條件,精確喚醒。