您的位置:首页 > 编程语言 > Java开发

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

2018-02-24 15:00 2036 查看
重量级锁:即为传统锁,是通过互斥量来实现代码同步,但是互斥量相对于CAS(原子性操作),要产生更多的性能消耗。轻量级锁:轻量级锁是通过CAS来实现同步,相对重量级锁的互斥量,性能会好很多。但是轻量级锁不是为了替代重量级锁。                    轻量级锁能够提升程序同步新能的依据是:对于绝大多数的锁,在整个同步周期内都是不存在竞争的,这是一个经验数据。                    如果没有竞争,轻量级锁使用CAS操作避免了使用互斥量的开销。但如果存在锁竞争,则轻量级锁会在CAS操作外,还使用了互斥量,                      性能反而下降。偏向锁:偏向锁能提高程序同步性能的场景是:有同步代码,但是只有同一个线程执行该同步代码块(注意和轻量级锁的应用场景的区别)。在这种                 场景下,连CAS操作也不需要了。总结:当多线程环境下,同步代码块经常由同一个线程访问,那么偏向锁将能提升性能;当同步代码块经常被多个线程访问,但是不存在并发情况,那么轻量级锁能够带来程序性能的提升;如果同步代码块不但被多个线程访问,并且发生并发情况,那么轻量级锁反而造成性能下降,不如使用重量级锁。这些性质都是java内置锁sychronized的特性,java5引进的Lock库不具备。所以经常能在书中看到,一半情况下推荐使用synchronized,因为将来jvm可能会对内置锁进行优化。推荐资料:《深入理解java虚拟机——JVM高级特性与最佳实践》https://www.cnblogs.com/charlesblc/p/5994162.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  偏向锁 轻量级锁