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