Synchronized

概念

  • Synchronized在JVM的实现原理,基于进入和退出Monitor对象来实现方法同步和代码块同步
  • JVM通过 monitorenter 和 monitorexit 两个指令来实现
  • monitorenter指令是在编译后插入到同步代码块开始位置; monitorexit指令是插入到方法结束处和异常处;JVM要保证每个monitorenter必须有对应的monitorexit与之配对
  • 任何对象都有一个monitor与之关联:
    1.当且一个monitor被持有后,对象处于锁定状态
    2.线程执行到monitorenter指令时,尝试获取对象对应的monitor的所有权,即尝试获取对象的锁

表现为以下三种形式

  • 对于普通同步方法,锁是当前实例对象
  • 对于静态同步方法,锁是当前类的Class对象
  • 对于同步方法块,锁是Synchronized括号里配置的对象

使用

  • 参考上面的三种表现形式

你可能感兴趣的:(Synchronized)