1.对象有三个区域
对象头/实例数据/对其填充
对象头又包含Mark Word/类型指针->指向方法区/数组长度
Mark Word如下图所示
2.偏向锁
当线程首次进入synchronized,他会将对象头的mark work更新为偏向锁。
JDK已废除
3.轻量锁
当线程获取已被偏向的锁时,会将锁升级为轻量锁。
具体过程是这样
先将对象头的mark work复制到线程栈中
通过CAS操作,将对象头的mark work更新指向线程栈中的记录,如果CAS成功(默认自旋15次)则升级为轻量级锁。
失败则表示已经其他线程操作过了,需要升级为重量级锁
为什么要把对象的mark work复制到线程栈中,是因为锁的获取和释放都是成对出现的。
当锁释放的时候,就需要将原有的线程栈mark word恢复到对象头中。
4.重量级锁
轻量级锁CAS操作失败,就会升级到重量级锁
标签:synchronized,对象,work,mark,升级,线程,过程 From: https://www.cnblogs.com/jichenghui/p/18361322