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