synchronized 是 JVM 实现的,而 ReentrantLock 是 JDK 实现的。性能
新版本 Java 对 synchronized 进行了不少优化,例如自旋锁等,synchronized 与 ReentrantLock 大体相同。优化
当持有锁的线程长期不释放锁的时候,正在等待的线程能够选择放弃等待,改成处理其余事情。线程
ReentrantLock 可中断,而 synchronized 不行。对象
公平锁是指多个线程在等待同一个锁时,必须按照申请锁的时间顺序来依次得到锁。it
synchronized 中的锁是非公平的,ReentrantLock 默认状况下也是非公平的,可是也能够是公平的。io
一个 ReentrantLock 能够同时绑定多个 Condition 对象。di