Synchronized 优化
背景
大多数情况下,虽然你加了锁,但是大部分时间,加锁的代码只有一个线程执行,没有竞争
为了优化该情景,有了偏向锁
锁升级/锁膨胀
- 一个对象刚创建的时候是001 ,4s后(jvm可配置),新创建的刚刚那个类的对象都会是101,开启了偏向锁,不用4s
- 若已经开启偏向锁, 使用synchronized,此时用的是偏向锁,(如上图,偏向锁锁的是线程ID)
- 若还未开启偏向锁,直接synchronized,会直接升级到轻量级锁CAS
- 若已经开启偏向锁,出现线程争抢,会升级到轻量级锁CAS
- 轻量级锁自旋次数有限制,若超出限制,过多线程争抢,升级为重量级锁
- 重量级锁指向就是monitor