synchronize和Lock区别

21 篇文章 0 订阅

以前一直说synchronize是一种重量级锁,因为以前synchronize是没有锁升级这个机制的,多个线程竞争锁时没有拿到锁的会直接进入阻塞状态,而后来引入了锁升级后,synchronize便没那么重了,具体可参加我的另一篇文章synchronize

synchronize的加锁是在对象头进行操作的,而Lock是基于AQS中的state进行的,每次进入锁就会使state+1,而在基于AQS的Lock中,竞争失败的线程不会立刻陷入阻塞,而是会加入同步队列进行一会的自旋操作,如果还无法获得锁才会进行阻塞。

线程的阻塞唤醒代价是很大的,如果一个频繁竞争的资源其运行时间也很短,使用Lock大部分通过自旋即可进行锁的获取,因此对于以前的synchronize失败就阻塞而言就轻了很多。但现在有了锁升级,这种情况下synchronize如果位于轻量级锁的状态下与Lock实际性能区别不大

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值