对象的结构 1. 对象结构:对象头、实例数据、对齐填充字节 2. 对象头:Mark World、指向类的指针、数组的长度 3. 根据Mark World中锁标志位的不同,可以分为:无锁、偏向锁、轻量级锁、重量级锁 流程 1. JDK 前期的时候,直接使用的是重量锁,后来进行的锁的升级 2. synchronized(Object)   2.1 当第一个线程进来时,会拿到该锁,这时候从无锁状态变成偏向锁状态,在对象头记录该线程的ID   2.2 如果第二次进来时,发现还是该线程,则直接进入即可,反之,则锁升级为轻量锁,并进行自旋操作(CAS),等待着锁的释放   2.3.如果自旋了超过了10次,则会变成重量锁,利用 OS 的 lock 指令实现
20190310225911793.jpg