synchronized 是 JVM 實現的,而 ReentrantLock 是 JDK 實現的。性能
新版本 Java 對 synchronized 進行了不少優化,例如自旋鎖等,synchronized 與 ReentrantLock 大體相同。優化
當持有鎖的線程長期不釋放鎖的時候,正在等待的線程能夠選擇放棄等待,改成處理其餘事情。線程
ReentrantLock 可中斷,而 synchronized 不行。對象
公平鎖是指多個線程在等待同一個鎖時,必須按照申請鎖的時間順序來依次得到鎖。it
synchronized 中的鎖是非公平的,ReentrantLock 默認狀況下也是非公平的,可是也能夠是公平的。io
一個 ReentrantLock 能夠同時綁定多個 Condition 對象。di