Java面试--Java基础--Synchronized和ReentrantLock的区别

共同点:

1. 都是用来协调多线程共享对象、变量的访问。

2. 都是可重入锁,同一线程可以多次获得同一个锁。

3. 都保证了可见性和互斥性。

不同点:

1. ReentrantLock 显示地获得、释放锁。synchronized隐式获得、释放锁。

2. ReentrantLock 可响应中断、可轮回,synchronized 是不可以响应中断的,为处理锁的不可用性提供了更高的灵活性
3. ReentrantLock 是API 级别的,synchronized 是JVM级别的
4. ReentrantLock 可以实现公平锁
5. ReentrantLock 通过Condition 可以绑定多个条件
6. 底层实现不一样, synchronized 是同步阻塞,使用的是悲观并发策略,lock 是同步非阻塞,采用的是乐观并发策略
7. Lock 是一个接口,而synchronized 是Java 中的关键字,synchronized 是内置的语言实现。
8. synchronized 在发生异常时,会自动释放线程占有的锁,因此不会导致死锁现象发生;而Lock 在发生异常时,如果没有主动通过unLock()去释放锁,则很可能造成死锁现象,因此使用Lock 时需要在finally 块中释放锁。
9. Lock 可以让等待锁的线程响应中断,而synchronized 却不行,使用synchronized 时,等待的线程会一直等待下去,不能够响应中断。
10. 通过Lock 可以知道有没有成功获取锁,而synchronized 却无法办到。
11. Lock 可以提高多个线程进行读操作的效率,既就是实现读写锁等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值