[Java] Difference between synchronized vs ReentrantLock

根據參考資料整理了ReentrantLock和synchronized的比較表:

ReentrantLock synchronized
鎖定對象 可以對任何對象上鎖 class literal, the instance of class
效能 較好 較差
中斷 可以放棄取鎖 一旦嘗試獲取鎖就會一直等待直到獲取到鎖
lock的鎖定和釋放 程式設計師控制 JVM控制
  • ReentrantLock的控制程度比較大,synchronized的控制程度比較小。
  • 正確使用的情況下,使用ReentrantLock會比使用synchronized的效能較好。
  • 若對同步問題不熟悉,鎖定和釋放ReentrantLock的順序不對容易造成deadlock。

參考資料

ReentrantLock Example in Java, Difference between synchronized vs ReentrantLock