1. 都是可重入鎖;
2. ReentrantLock內部是實現了Sync,Sync繼承于AQS抽象類。Sync有兩個實現,一個是公平鎖,一個是非公平鎖,通過構造函數定義。AQS中維護了一個state來計算重入次數,避免頻繁的持有釋放操作帶來的線程問題。
3. ReentrantLock只能定義代碼塊,而Synchronized可以定義方法和代碼塊;
4. Synchronized是JVM的一個內部關鍵字,ReentrantLock是JDK1.5之后引入的一個API層面的互斥鎖;
5. Synchronized實現自動的加鎖、釋放鎖,ReentrantLock需要手動加鎖和釋放鎖,中間可以暫停;
6. Synchronized由于引進了偏向鎖和自旋鎖,所以性能上和ReentrantLock差不多,但操作上方便很多,所以優先使用Synchronized。