并发编程已经成为程序员必备技能

作为Java程序员,不懂得并发编程显然已经不能满足市场需求了,尤其是在面试过程中将处于被动地位,也有可能面试将就此终结。

那么作为Java开发者的你,日常虽然可以基于Java的并发工具包实现并发编程,但它背后的原理和机制你真的明白吗?不妨来检验下自己,对于synchronized关键字,你用过吗?它的底层原理又是什么呢?

synchronized关键字修饰对象实现同步

synchronized关键字背后的实现机制

synchronized是jvm实现的一种互斥同步访问方式,底层是基于每个对象的监视器(monitor)来实现的。被synchronized修饰的代码,在被编译器编译后在被修饰的代码前后加上了一组字节指令。

在代码开始加入了monitorenter,在代码后面加入了monitorexit,这两个字节码指令配合完成了synchronized关键字修饰代码的互斥访问。

在虚拟机执行到monitorenter指令的时候,会请求获取对象的monitor锁,基于monitor锁又衍生出一个锁计数器的概念。

synchronized关键字编译后底层代码

当执行monitorenter时,若对象未被锁定时,或者当前线程已经拥有了此对象的monitor锁,则锁计数器+1,该线程获取该对象锁。

当执行monitorexit时,锁计数器-1,当计数器为0时,此对象锁就被释放了。那么其他阻塞的线程则可以请求获取该monitor锁。

并发问题思考和拓展

了解了以上原理,我们来思考一个问题:synchronized都能修饰什么?在修饰静态方法和非静态方法时又有什么区别呢?欢迎大家积极留言讨论~

欢迎关注我@码农wu师,专注IT技能分享,一起聊聊编程谈谈生活!

synchronized底层原理_你用过synchronized吗?它的底层原理是什么?Java经典面试题来了...相关推荐

  1. java面试题_阿里大厂流出的数百道 Java 经典面试题

    BAT 常问的 Java基础39道常见面试题 1.八种基本数据类型的大小,以及他们的封装类 2.引用数据类型 3.Switch能否用string做参数 4.equals与==的区别 5.自动装箱,常量 ...

  2. 进出仓原理_你问我答 | 球磨机组成和工作原理?

    壹 问 问题1:球磨机组成和工作原理? 壹 答 回答1: 一.球磨机工作原理: 该球磨机的主要工作部分是一个装在两个大型轴承上并水平放置的回转圆筒,筒体用隔仓板分成几个仓室,在各仓内装一定形状和大小的 ...

  3. 双时隙的工作原理_双闭环直流调速系统的工作原理(一)

    双闭环直流调速系统的工作原理(一) 目录 1前言 2 2双闭环直流调速系统的工作原理 3 2.1双闭环直流调速系统的介绍 3 2.2双闭环直流调速系统的组成 4 2.3双闭环直流调速系统的稳太结构图和 ...

  4. 小车自动往返工作原理_自动门厂家为你讲解各类自动门工作原理

    自动门厂家为你讲解各类自动门工作原理 凯撒自动门作为一家专业门控企业,自动门生产厂家,畅谈各种自动门的概念和工作原理.凯撒门控公司认为,自动门是指当人们接近或离开时能够自动打开和关闭的门扇.门扇的智能 ...

  5. 简述一下动态sql的执行原理_简述一下Pogo Pin电连接器的设计原理和考虑因素

    "简述一下Pogo Pin电连接器的设计原理和考虑因素"由电蜂优选为您整理. 目前随着电子科技时代的快速发展,电连接器的发展也逐渐成为主流发展趋势之一.例如电动汽车新能源的开发与研 ...

  6. 充电原理_电动汽车充电桩如何设置?充电桩原理介绍

    随着新能源产业的蓬勃发展,电动汽车在生活中变得越来越普遍.比亚迪(BYD),宝马(BMW)和特斯拉(Tesla)等汽车制造商都已经推出了全电动汽车,而混合动力汽车则更为普遍.为了能够方便地为这些电动汽 ...

  7. java文件读入原理_描述一下JVM加载class文件的原理机制

    1.JVM 简介 JVM 是我们Javaer 的最基本功底了,刚开始学Java 的时候,一般都是从"Hello World "开始的,然后会写个复杂点class ,然后再找一些开源 ...

  8. 卷积神经网络原理_人脸识别背后,卷积神经网络的数学原理原来是这样的

    在自动驾驶.医疗以及零售这些领域,计算机视觉让我们完成了一些直到最近都被认为是不可能的事情.卷积神经网络可能是这一巨大成功背后的关键组成模块.这次,我们将要使用卷积神经网络的思想来拓宽我们对神经网络工 ...

  9. mysql驱动加载原理_老调重弹:JDBC系列 之 lt;驱动载入原理全面解析gt;

    前言 近期在研究Mybatis框架,因为该框架基于JDBC.想要非常好地理解和学习Mybatis,必需要对JDBC有较深入的了解.所以便把JDBC 这个东东翻出来.好好总结一番,作为自己的笔记,也是给 ...

最新文章

  1. 用createrepo命令创建自己的yum源
  2. Android ProgressBar 不能在Button上面显示
  3. Objective-C 2.0属性(Property)介绍
  4. 离个职居然还用上了叫号机,差点以为在医院...
  5. vue设置全局变量和修改
  6. 进一步考察与UI相关的安全漏洞-下
  7. linux cron计划任务
  8. Codeforces Round #619 (Div. 2) E. Nanosoft 思维 + 二维前缀和
  9. 性能测试--【MySQL】Sysbench 性能压测
  10. C/C++线程与多线程工作笔记0005---c/c++中的wchar_t类型
  11. java jpanel 叠加_如何添加多个扩展JPanel到Java中的一个JFrame中?
  12. 小米盒子服务器无信号,小米小盒子连接HDMI无信号怎么办?
  13. Java初级程序员面试中应该如何准备?一般公司对Java开发的要求有哪些?
  14. 网站的页面该如何去设计与布局
  15. 记录matlab符号方程符号解求法
  16. 2021年高教杯数学建模国赛C题思路详解
  17. 网名闲话之“茶乡浪子”
  18. PPC修改注册表大全 (注册表必看)(转载)
  19. python urllib库获取淘宝主图
  20. 李开复给中国大学生的七封公开信(其三)

热门文章

  1. 转:[大数据竞赛]夺冠感言:走进业务,提升对世界的认知能力
  2. 在做项目中遇到的JS问题
  3. CodeForces 114B 【STL应用】
  4. #pragma pack(n) 的作用
  5. Sarg安装配置使用
  6. 禁止validateRequest的办法
  7. 用ASP.NET上传大文件
  8. 【GStreamer】gstreamer工具详解之:gst-discoverer-1.0
  9. Qt中文手册 之 QTreeWidgetItem
  10. linux隐藏文件的方法,Linux下隐藏文件的操作方法