java并发编程synchronized底层实现原理

 更新时间:2022年02月08日 14:52:39   作者:负债程序猿  
这篇文章主要介绍了java并发编程synchronized底层实现原理

首先那些说看过synchronized源码的基本都是大聪明,synchronized根本点不进去,想弄懂它的实现原理,我们只能通过看编译好的字节码文件

整个测试类

public class SynchronizedTest {
    public void get() {
        synchronized (this) {
            System.out.println("小张你好鸭!");
        }
    }
}

字节码文件(怎么看?? idea => view => Show ByteCode)

在这里插入图片描述

再来说原理

基于对象的监视器(ObjectMonitor),我们在字节码文件里面可以看到,在同步方法执行前后,有两个指令,进入同步方法前monitorenter,方法执行完成后monitorexit;

我的理解是对象都有一个监视器ObjectMonitor,这个监视器内部有很多属性,比如当前等待线程数、计数器、当前所属线程等;其中计数器属性就是用来记录是否已被线程占有,方法执行到monitorenter时,计数器+1,执行到monitorexit时,计数器-1,线程就是通过这个计数器来判断当前锁对象是否已被占用(0为未占用,此时可以获取锁);

补充:一个synchronize锁会有两个monitorexit,这是保证synchronize能一定释放锁的机制,一个是方法正常执行完释放,一个是执行过程发生异常时虚拟机释放;

以上就是java并发编程synchronized底层实现原理的详细内容,更多关于synchronized底层原理的资料请关注脚本之家其它相关文章!

相关文章

  • java自定义Scanner类似功能类的实例讲解

    java自定义Scanner类似功能类的实例讲解

    这篇文章主要介绍了java自定义Scanner类似功能类的实例讲解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-08-08
  • 详解Kotlin中如何实现类似Java或C#中的静态方法

    详解Kotlin中如何实现类似Java或C#中的静态方法

    Kotlin中如何实现类似Java或C#中的静态方法,本文总结了几种方法,分别是:包级函数、伴生对象、扩展函数和对象声明。这需要大家根据不同的情况进行选择。
    2017-05-05
  • Redis在springboot中的使用教程

    Redis在springboot中的使用教程

    这篇文章主要介绍了Redis在springboot中的使用教程,本文实例代码相结合的形式给大家介绍的非常详细,需要的朋友可以参考下
    2018-06-06
  • springboot开启声明式事务的方法

    springboot开启声明式事务的方法

    本篇文章主要介绍了springboot开启声明式事务的方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-05-05
  • java random.nextInt的坑及解决

    java random.nextInt的坑及解决

    这篇文章主要介绍了java random.nextInt的坑及解决,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-09-09
  • 手把手带你用java搞定汉诺塔

    手把手带你用java搞定汉诺塔

    这篇文章主要给大家介绍了关于Java青蛙跳台阶问题的解决思路与代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-08-08
  • Springboot GET和POST请求参数获取方式小结

    Springboot GET和POST请求参数获取方式小结

    Spring Boot GET和POST请求参数获取是开发人员经常需要解决的问题,本文主要介绍了Springboot GET和POST请求参数获取方式小结,具有一定的参考价值,感兴趣的可以了解一下
    2023-09-09
  • IntelliJ IDEA maven 构建简单springmvc项目(图文教程)

    IntelliJ IDEA maven 构建简单springmvc项目(图文教程)

    在工作当中,我们有时需要创建一个全新的工程,而基于spring-mvc web的工程较为常见,这篇文章主要介绍了IntelliJ IDEA maven 构建简单springmvc项目(图文教程),感兴趣的小伙伴们可以参考一下
    2018-05-05
  • spring多数据源配置实现方法实例分析

    spring多数据源配置实现方法实例分析

    这篇文章主要介绍了spring多数据源配置实现方法,结合实例形式分析了spring多数据源配置相关操作技巧与使用注意事项,需要的朋友可以参考下
    2019-12-12
  • Java基础学习之标签

    Java基础学习之标签

    在Java中,标签必须在循环之前使用, 一个循环之中嵌套另一个循环的开关,从多重嵌套中continue或break,该文详细介绍了标签的相关知识,对正在学习java基础的小伙伴们还很有帮助,需要的朋友可以参考下
    2021-05-05

最新评论