http://www.infoq.com/cn/articles/java-se-16-synchronized
读后解读Synchronized下的三种锁:偏向锁 轻量锁 重量锁
锁升级场景:蜀国四兄弟争骑单车007号
1、 # 获取偏向锁
张飞要骑
有人吗
没人
写上张飞的名字
成功获取偏向锁
骑走
1.1、# 拥有偏向锁
张飞要骑车
有我的名字
骑走
2、#争抢进入轻量级锁
刘备要骑
看到张飞的名字在,问张飞在吗
张飞:在
尝试写上刘备的名字失败
张飞我在等你
刘备骑完后把他的名字抹去进入轻量级锁
2.1、#争抢获取偏向锁
尝试写上刘备名字成功
获取偏向锁
骑走
3、#争抢轻量级锁
诸葛亮要骑
拍照单车挂身上(复制对象头锁信息到线程栈内存)
尝试在单车箭头指向自己照片(对象头锁信息指针指向线程栈内存)
成功
成功获取轻量级锁
骑走
还车成功
3.1、#已经争抢成了重量级锁
还车失败,好了好了你们快抢(关羽)
4、#争抢轻量级锁
关羽要骑车
拍照单车
尝试在单车箭头指向自己照片
失败
再试多次(自旋锁)
艹有完没完了,设置重量级锁
蹲等
诸葛亮说骑完了,抢