比拟
- 锁的实现
synchronized 是 JVM 实现的,而 ReentrantLock 是 JDK 实现的。
- 性能
新版本 Java 对 synchronized 进行了很多优化,例如自旋锁等,synchronized 与 ReentrantLock 大致相同。
- 期待可中断
当持有锁的线程长期不开释锁的时候,正在期待的线程能够抉择放弃期待,改为解决其余事件。
ReentrantLock 可中断,而 synchronized 不行。
- 偏心锁
偏心锁是指多个线程在期待同一个锁时,必须依照申请锁的工夫程序来顺次取得锁。
synchronized 中的锁是非偏心的,ReentrantLock 默认状况下也是非偏心的,然而也能够是偏心的。
- 锁绑定多个条件
一个 ReentrantLock 能够同时绑定多个 Condition 对象。
应用抉择
除非须要应用 ReentrantLock 的高级性能,否则优先应用 synchronized。这是因为 synchronized 是 JVM 实现的一种锁机制,JVM 原生地反对它,而 ReentrantLock 不是所有的 JDK 版本都反对。并且应用 synchronized 不必放心没有开释锁而导致死锁问题,因为 JVM 会确保锁的开释。