根據參考資料整理了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