聊聊java 中的偏向锁、轻量级锁、重量级锁的介绍

重量级锁:即为传统锁,是通过互斥量来实现代码同步,但是互斥量相对于CAS(原子性操作),要产生更多的性能消耗。

轻量级锁:轻量级锁是通过CAS来实现同步,相对重量级锁的互斥量,性能会好很多。但是轻量级锁不是为了替代重量级锁。

                    轻量级锁能够提升程序同步新能的依据是:对于绝大多数的锁,在整个同步周期内都是不存在竞争的,这是一个经验数据。

                    如果没有竞争,轻量级锁使用CAS操作避免了使用互斥量的开销。但如果存在锁竞争,则轻量级锁会在CAS操作外,还使用了互斥量,                      性能反而下降。

偏向锁:偏向锁能提高程序同步性能的场景是:有同步代码,但是只有同一个线程执行该同步代码块(注意和轻量级锁的应用场景的区别)。在这种                 场景下,连CAS操作也不需要了。

总结:当多线程环境下,同步代码块经常由同一个线程访问,那么偏向锁将能提升性能;当同步代码块经常被多个线程访问,但是不存在并发情况,那么轻量级锁能够带来程序性能的提升;如果同步代码块不但被多个线程访问,并且发生并发情况,那么轻量级锁反而造成性能下降,不如使用重量级锁。

这些性质都是java内置锁sychronized的特性,java5引进的Lock库不具备。所以经常能在书中看到,一半情况下推荐使用synchronized,因为将来jvm可能会对内置锁进行优化。

推荐资料:

《深入理解java虚拟机——JVM高级特性与最佳实践》

https://www.cnblogs.com/charlesblc/p/5994162.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值