java锁synchronized 与ReentrantLock 的区别

1. 锁的实现

synchronized 是 JVM 实现的,而 ReentrantLock 是 JDK 中并发包 juc 实现的。

2. 性能

新版本 jdk1.6 之后 对 synchronized 进行了很多优化,例如自旋锁,轻量级锁等,synchronized 与 ReentrantLock 大致相同。

3. 等待可中断

当持有锁的线程长期不释放锁的时候,正在等待的线程可以选择放弃等待,改为处理其他事情,ReentrantLock 可中断,而 synchronized 不行。

4. 公平锁

公平锁是指多个线程在等待同一个锁时,必须按照申请锁的时间顺序来依次获得锁。synchronized 中的锁是非公平的,ReentrantLock 默认情况下也是非公平的,但是也可以是公平的,看具体情况。

5. 锁绑定多个条件

一个 ReentrantLock 可以同时绑定多个 Condition 对象。

建议:除非需要使用 ReentrantLock 的高级功能,否则优先使用 synchronized。这是因为 synchronized 是 JVM 实现的一种锁机制,JVM 原生地支持它,而 ReentrantLock 不是所有的 JDK 版本都支持。并且使用 synchronized 不用担心没有释放锁而导致死锁问题,因为 JVM 会确保锁的释放。

正文完
 0
49ziy
版权声明:本站原创文章,由 49ziy 于2019-01-02发表,共计524字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
验证码