ReentrantLock和synchronized的区别

本文对比了synchronized和ReentrantLock在使用成本、灵活性以及底层实现上的差异,指出ReentrantLock提供更精细的控制但synchronized具有更高的潜力,因其基于操作系统且有更多硬件联动可能。
摘要由CSDN通过智能技术生成

首先,从使用成本来讲,synchronized的使用成本要比ReentrantLock低。

synchronized的使用,直接就是加到方法上,或者代码块上即可,加锁和解锁的这个操作,都是自动完成的,开发者不需要操作。

而ReentrantLock则要求开发者自己来控制,你自己new出来,自己去Lock,使用完成后再unLock解锁。

但是ReentrantLock在使用上,要更加的灵活一点,因为他可以由我们自己控制,所以他能实现一些额外的功能,比如查看锁的状态,尝试获取锁,获取不到就返回,再或者我可以让他在一定时间内自己重试去获取锁,这些synchronized是做不到的。

第二个方面,我们可以从底层实现讲一下。

synchronized是使用对象头来实现的,他会涉及到一个锁升级的过程,最终会升级为重量级锁(自己看情况展开说明)

而ReentrantLock是基于AQS来实现,抢锁的时候用CAS的方式来优化性能,抢不到则进入队列排队等待。

最后,从潜力上讲的话,synchronized会更高,因为ReentrantLock他是完全由java来实现的,该做的优化都已经做了,而synchronized是基于操作系统实现的,他存在更大的进步空间,因为操作系统的操作权限更大,能和硬件做的联动也更多。

  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值