> 文章列表 > synchronized原理mointor

synchronized原理mointor

synchronized原理mointor

Monitor对象

在java中普通对象的对象头信息

synchronized原理mointor

  • Mark Word记录分代年龄、加锁的状态;
  • Klass Word指向类对象的指针;

其中Mark Word结构

synchronized原理mointor

monitor执行原理

我们在加了重量级锁synchronize后,对象头的mark word会指向一个monitor,monitor是操作系统层面的c语言与java无关,如果此时monitor中没有owner,那么当前线程执行,如果已经有owner那么当前线程记录在monitor中的EntryList中阻塞等待,

等待owner释放后,抢夺成为owner;

synchronized原理mointor

字节码角度

案例

public class Monitor_Test {static final Object lock = new Object();static int counter;public static void main(String[] args) {synchronized (lock){counter++;}}
}

编译

synchronized原理mointor

monitorenter将对象头的mark word存储monitor指针;

monitorexit释放monitor指针,还原mark word保存的分代年龄和hash;

goto24即return本该结束,但是如果代码出现异常,没有正常执行?

19行到23行处理异常,athrow抛出;