JavaEE初阶-synchronized 和 ReentrantLock 之间的区别
一.synchronized锁和ReentrantLock之间的共同点
1.都是用来协调对共享对象、变量的访问
2.都是可,同一线程可以多次获得同一个锁
3.都保证了可见性和互斥性
二.synchronized 和 ReentrantLock 之间的区别
1.用法不同
synchronized 可用来修饰普通方法、静态方法和代码块,而 ReentrantLock 只能用在代码块上。
2.获取锁和释放锁的方式不同
synchronized 会自动加锁和释放锁,当进入 synchronized 修饰的代码块之后会自动加锁,当离开 synchronized 的代码段之后会自动释放锁,而 ReentrantLock 需要手动加锁和释放锁
3.锁的类型不同
synchronized 属于非公平锁,而 ReentrantLock 既可以是公平锁也可以是非公平锁。
synchronized是同步阻塞,使用的是悲观并发策略,lock是同步非阻塞,采用的是乐观并发策略
4.响应中断不同
ReentrantLock 可以使用 lockInterruptibly 获取锁并响应中断指令,而 synchronized 不能响应中断,也就是如果发生了死锁,使用 synchronized 会一直等待下去,而使用 ReentrantLock 可以响应中断并释放锁,从而解决死锁的问题
5.底层实现不同
synchronized 是 JVM 层面通过监视器(Monitor)实现的,而 ReentrantLock 是通过 AQS(AbstractQueuedSynchronizer)程序级别的 API 实现。
6.实现原理不同
Lock是一个接口,而synchronized是java中的关键字,synchronized是内置的语言实现
下一篇:
六个好用的在线代码编辑器,你选哪个?