乐趣区

关于java:ReentrantLock与synchronized

比拟

  1. 锁的实现

synchronized 是 JVM 实现的,而 ReentrantLock 是 JDK 实现的。

  1. 性能

新版本 Java 对 synchronized 进行了很多优化,例如自旋锁等,synchronized 与 ReentrantLock 大致相同。

  1. 期待可中断

当持有锁的线程长期不开释锁的时候,正在期待的线程能够抉择放弃期待,改为解决其余事件。

ReentrantLock 可中断,而 synchronized 不行。

  1. 偏心锁

偏心锁是指多个线程在期待同一个锁时,必须依照申请锁的工夫程序来顺次取得锁。

synchronized 中的锁是非偏心的,ReentrantLock 默认状况下也是非偏心的,然而也能够是偏心的。

  1. 锁绑定多个条件

一个 ReentrantLock 能够同时绑定多个 Condition 对象。

应用抉择
除非须要应用 ReentrantLock 的高级性能,否则优先应用 synchronized。这是因为 synchronized 是 JVM 实现的一种锁机制,JVM 原生地反对它,而 ReentrantLock 不是所有的 JDK 版本都反对。并且应用 synchronized 不必放心没有开释锁而导致死锁问题,因为 JVM 会确保锁的开释。

退出移动版