從以下五個點答就行。
(1)synchronized是獨佔鎖,加鎖和解鎖的過程自動進行,易於操作,但不夠靈活。
ReentrantLock也是獨佔鎖,加鎖和解鎖的過程需要手動進行,不易操作,但非常靈活。
(2)synchronized可重入,因爲加鎖和解鎖自動進行,不必擔心最後是否釋放鎖;
ReentrantLock也可重入,但加鎖和解鎖需要手動進行,且次數需一樣,否則其他線程無法獲得鎖。
(3)synchronized不可響應中斷,一個線程獲取不到鎖就一直等着;
ReentrantLock可以相應中斷。
(4)ReentrantLock可以實現公平鎖,synchronized不可以。
(5)synchronized是jvm層面的,ReentrantLock是寫出來的API,效率會低一點。