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中Map与HashMap,Hashtable,HashSet的区别

    浅析Java中Map与HashMap,Hashtable,HashSet的区别

    HashMap和Hashtable两个类都实现了Map接口,二者保存K-V对(key-value对);HashSet则实现了Set接口,性质类似于集合
    2013-09-09
  • Spring Boot自动配置的原理及@Conditional条件注解

    Spring Boot自动配置的原理及@Conditional条件注解

    这篇文章主要介绍了Spring Boot自动配置的原理及@Conditional条件注解,文章围绕主题展开详细的内容介绍,具有一定的参考价值,感兴趣的朋友可以参考一下
    2022-07-07
  • Java Spring Bean的生命周期管理详解

    Java Spring Bean的生命周期管理详解

    这篇文章主要为大家介绍了Java Spring Bean的生命周期管理,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助
    2021-12-12
  • Spring AI ectorStore的使用流程

    Spring AI ectorStore的使用流程

    SpringAI中的VectorStore是一种用于存储和检索高维向量数据的数据库或存储解决方案,它在AI应用中发挥着至关重要的作用,本文给大家介绍Spring AI ectorStore的使用流程,感兴趣的朋友一起看看吧
    2025-03-03
  • 简单了解Java删除字符replaceFirst原理及实例

    简单了解Java删除字符replaceFirst原理及实例

    这篇文章主要介绍了简单了解Java删除字符replaceFirst原理及实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • 100-200之间所有素数求和程序代码(二个版本)

    100-200之间所有素数求和程序代码(二个版本)

    写一个求100-200之间素数,并求和的程序,大家参考使用吧
    2013-11-11
  • 探讨java深拷贝

    探讨java深拷贝

    这篇文章主要针对java深拷贝的相关内容进行解析,帮助大家学习理解java深拷贝,感兴趣的小伙伴们可以参考一下
    2016-02-02
  • 学生视角看Java 面向对象的继承本质

    学生视角看Java 面向对象的继承本质

    继承是java面向对象编程技术的一块基石,因为它允许创建分等级层次的类。继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得子类具有父类相同的行为
    2022-03-03
  • SpringCloud Feign Jackson自定义配置方式

    SpringCloud Feign Jackson自定义配置方式

    这篇文章主要介绍了SpringCloud Feign Jackson自定义配置方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-03-03
  • 关于RestTemplate中的Get请求

    关于RestTemplate中的Get请求

    这篇文章主要介绍了关于RestTemplate中的Get请求,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07

最新评论