JDK1.6的Synchronized底层优化(偏向锁、轻量级锁)

本来计划完善java并发编程艺术读后感二,后来直接在项目中需要用到锁,所以单独提出来做个记录。
锁一共有4种状态,级别从低到高依次是:无锁状态、偏向锁状态、轻量级锁状
态和重量级锁状态,这几个状态会随着竞争情况逐渐升级。锁可以升级但不能降级,意味着偏
向锁升级成轻量级锁后不能降级成偏向锁。这种锁升级却不能降级的策略,目的是为了提高
获得锁和释放锁的效率。


Synchronized原理:

Synchronized是通过对象内部的一个叫做监视器锁(monitor)来实现的。但是监视器锁本质又是依赖于底层的操作系统的Mutex Lock来实现的。而操作系统实现线程之间的切换这就需要从用户态转换到核心态,这个成本非常高,状态之间的转换需要相对比较长的时间,这就是为什么Synchronized效率低的原因。因此,这种依赖于操作系统Mutex Lock所实现的锁我们称之为“重量级锁”。

优化

1.适应自旋锁

   自旋锁:为了减少线程状态改变带来的消耗 不停地执行当前线程 

2.锁消除:

  不可能存在共享数据竞争的锁进行消除

3.锁粗化:

  将连续的加锁 精简到只加一次锁

4.轻量级锁:

 无竞争条件下 通过CAS消除同步互斥


5.偏向锁:

无竞争条件下 消除整个同步互斥,连CAS都不操作。


啦啦啦!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值