概念
- Synchronized在JVM的实现原理,基于进入和退出Monitor对象来实现方法同步和代码块同步
- JVM通过 monitorenter 和 monitorexit 两个指令来实现
- monitorenter指令是在编译后插入到同步代码块开始位置; monitorexit指令是插入到方法结束处和异常处;JVM要保证每个monitorenter必须有对应的monitorexit与之配对
- 任何对象都有一个monitor与之关联:
1.当且一个monitor被持有后,对象处于锁定状态
2.线程执行到monitorenter指令时,尝试获取对象对应的monitor的所有权,即尝试获取对象的锁
表现为以下三种形式
- 对于普通同步方法,锁是当前实例对象
- 对于静态同步方法,锁是当前类的Class对象
- 对于同步方法块,锁是Synchronized括号里配置的对象
使用
- 参考上面的三种表现形式