synchronized和lock的區別
- 原始構成:
- synchronized是關鍵字屬於JVM層面,monitorenter(底層是通過monitor對象來完成,其實wait/notify等方法也依賴於monitor對象只有在同步塊或者方法中才能調用wait/notify)
- lock是類,是api層面的鎖
- 使用方法:
- synchronized不需要手動釋放鎖,當synchronized代碼執行完以后系統會自動讓線程釋放對鎖的占用,
- ReentrantLock則需要手動釋放鎖,不然可能會導致死鎖現象。
- 是否可中斷
- synchronized不可中斷
- ReentrantLock可以中斷,也可以不中斷,中斷的話要調用Interrupt
- 加鎖是否公平
- synchronized非公平鎖
- ReentrantLock兩者都可以,默認公平鎖。主要看構造方法的boolean值。
- 綁定多個condition
- synchronized沒有
- ReentrantLock用來實現分組喚醒需要的線程們,可以精確喚醒,而不是像synchronized要么隨機喚醒一個或者全部喚醒。
ReentrantLock:https://www.cnblogs.com/dalianpai/p/14204465.html
synchronized:https://www.cnblogs.com/dalianpai/p/14178191.html