聊聊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
相关文章推荐
- java 中的锁 -- 偏向锁、轻量级锁、自旋锁、重量级锁
- 偏向锁,轻量级锁,自旋锁,重量级锁的详细介绍
- 【转载】Java中的锁机制 synchronized & 偏向锁 & 轻量级锁 & 重量级锁 & 各自优缺点及场景 & AtomicReference
- 偏向锁,轻量级锁,自旋锁,重量级锁的详细介绍
- 浅谈Java里的三种锁:偏向锁、轻量级锁和重量级锁
- Java并发:偏向锁、轻量级锁、重量级锁
- java 中的锁 -- 偏向锁、轻量级锁、自旋锁、重量级锁
- java 中的锁 -- 偏向锁、轻量级锁、自旋锁、重量级锁
- Java中的锁机制(偏向锁、轻量级锁、重量级锁)
- Java中的锁机制 synchronized & 偏向锁 & 轻量级锁 & 重量级锁 & 各自优缺点及场景
- java 中的锁 -- 偏向锁、轻量级锁、自旋锁、重量级锁
- 111 java 几种锁机制(偏向锁,轻量级锁,重量级锁,自旋锁)
- java 轻量级组件和重量级组件的区别
- java的偏向锁,轻量级锁,锁
- java重量级与轻量级
- 锁机制-自旋锁、偏向锁、轻量级锁、重量级锁
- 偏向锁、轻量级锁、重量级锁的升级以及区别
- java 轻量级组件与重量级组件的区别
- 虚拟机内的锁优化(偏向锁,轻量级锁,自旋锁,重量级锁)
- Java并发编程:Synchronized底层优化(偏向锁、轻量级锁)