美文网首页面试题
synchronized实现原理

synchronized实现原理

作者: 雁阵惊寒_zhn | 来源:发表于2020-11-06 23:41 被阅读0次

    Java虚拟机支持方法级的同步和方法内部一段指令序列的同步,两种同步结构都使用管程(Monitor,或直接称为锁)来实现。

    synchronized修饰的方法属于方法级同步,方法级的同步是隐式的,无须通过字节码指令来控制,实现在方法调用和返回中。在Class文件中同步的方法用ACC_SYNCHRONIZED标识,方法调用时会先检查是否设置了这个字段,如果存在,执行线程需要先成功持有管程Monitor,才能执行方法。正常退出方法或者抛出异常都会自动释放管程Monitor。

    synchronized同步代码块,Java虚拟机的指令集中有monitorentermonitorexit两条指令支持关键字synchronized语义,两条指令之间的部分就是同步的代码块逻辑的字节码指令。

    两者本质上都是对一个对象的管程Monitor进行获取,管程Monitor存储在Java的对象头Mark Word中。

    在HotSpot虚拟机底层C++实现中,oopDesc类是Java对象的顶级基类,其中定义着对象头数据结构,所以每一个Java对象都包含对象头。锁对象(管程Monitor)是一个定义的ObjectMonitor结构,HotSpot虚拟机采用ObjectMonitor类来实现Monitor。


    相关文章

      网友评论

        本文标题:synchronized实现原理

        本文链接:https://www.haomeiwen.com/subject/jkusvktx.html