在分析完对象头以后,我们知道对象头里其实是有一个重量级锁的指针,而重量级锁的指针指向的就是monitor监视器对象。
synchronized无论是修饰代码块还是修饰普通方法和静态方法,本质上还都是作用在对象上

为什么说本质上synchronized还是作用在对象上(猜测)?

synchronized分为对象锁和类锁。对象锁,锁的是实例化对象。而类锁加在了类上,会对每一个该类的实例化对象上锁,说白了还是加在对象上。
类的信息是存放在方法区,该类的每一个实例对象都有一个Kclass point指针(对象头中)指向其类信息。如果类有了锁标志,其实例化对象中的markword的锁标志会修改,从而所有的实例化对象的会拥有相同的锁,也就是拥有相同的monitor。所以本质还是作用在对象上。

  • 不管是类锁还是对象锁,多线程获取锁的本质其实是获取的monitor对象。

monitor对象长啥样?


当多个线程同时访问一段同步代码时,首先会进入_EntryList队列中,当某个线程获取到对象的monitor后进入_Owner区域并把monitor中的_owner变量设置为当前线程,同时monitor中的计数器_count加1。即获得对象锁。

若持有monitor的线程调用wait()方法,将释放当前持有的monitor,_owner变量恢复为null,_count自减1,同时该线程进入_WaitSet集合中等待被唤醒。

参考
Monitor原理
monitor是什么

Monitor监视器对象相关推荐

  1. java什么是monitor和Monitor监视器锁、对象布局

    文章目录 Monitor监视器锁 什么是moniter 对象布局 Monitor监视器锁 每个同步对象都有一个自己的Monitor(监视器锁),加锁过程如下图所示: 任何一个对象都有一个Monitor ...

  2. synchronized底层原理—Monitor监视器

    深入了解synchronized 文章目录 深入了解synchronized 1. 作用 2. 底层实现原理 1. Monitor类 2. 管程 3. ObjectMonitor 4. _WaitSe ...

  3. C# 线程同步之排它锁/Monitor监视器类

    一.Monitor类说明,提供同步访问对象的机制. 1.位于System.Threading命名空间下,mscorlib.dll程序集中. 2.Monitor通过获取和释放排它锁的方式实现多线程的同步 ...

  4. Java同步机制之Monitor监视器与syncrhoized实现原理

    转载请注意原文地址:http://www.cnblogs.com/ygj0930/p/6561667.html  一:Monitor Monitor是一个同步工具,相当于操作系统中的互斥量(mutex ...

  5. reentrantlock原理_分享:synchronized和ReentrantLock的实现原理知识点

    前言 通常呢,会在并发情况下,同时操作某一业务从而造成数据重复提交,业务混乱等问题,通常呢,遇到解决类似问题可采用加锁,限流等问题来解决,那么看看这篇关于java中关于锁中synchronized和R ...

  6. 阿里巴巴/招行信用卡中心21届实习面试知识点汇总

    基础 JDK1.8的新特性(阿里) ①引入了lambda表达式,可以简化匿名内部类的代码,允许将方法作为参数.②方法引用,可以进一步简化lambda表达式的书写,可以引用类的构造方法,静态方法,特定类 ...

  7. java8基础面试题

    JavaSE 88 基础语法 9 Q1:简单说说Java有哪些数据类型 答:①分为基本数据类型和引用数据类型.②基本数据类型包括:数值型(byte.short.int.long.float.doubl ...

  8. JAVA 实习面试题大全必看

    JAVA 实习面试题大全必看 JavaSE 88 基础语法 9 Q1:简单说说Java有哪些数据类型 答:①分为基本数据类型和引用数据类型.②基本数据类型包括:数值型(byte.short.int.l ...

  9. Java8 面试基础知识宝典【主要以问题的形式记录,SE,EE,锁机制,框架,数据库等】

    目录 JavaSE 8 基础语法 9 Q1:简单说说Java有哪些数据类型 Q2:float number=3.4;有没有问题?为什么?默认类型[int.double] Q3:字符串拼接的方式以及效率 ...

最新文章

  1. 将moss 2007的模板文件导入到moss 2010
  2. python列表字典操作_Python 列表(list)、字典(dict)、字符串(string)常用基本操作小结...
  3. 传统网站性能优化的三种手段
  4. IE, FireFox, Opera 浏览器支持CSS实现Alpha半透明的方法
  5. 在CentOS7上安装RocketMQ 4.8.0
  6. 剑指offer (04):二维数组中的查找 (C++ Python 实现)
  7. 特征选择 ReliefF算法
  8. ZMQ中线程之间发送命令
  9. python 2个dict如何合并
  10. 易企秀HTML5文件,怎么用易企秀制作h5场景秀?
  11. 关于下载淘宝教育的课程
  12. 微信朋友圈卖葡萄经验分享
  13. Drupal7_2:安装drupal
  14. 什么是matlab的幅值域,基于LabVIEW的虚拟频谱分析仪
  15. 1. 机器学习概述与特征工程
  16. web返回的数据集格式_200G倾斜数据无插件web端预览!兼容三端,有容乃大—MapGIS M3D数据格式...
  17. 剑网三服务器一直未响应,《剑网3》大师赛第二个比赛日赛后采访回顾
  18. Python数据清洗:strava运动跑步和骑行路径路线经纬度散点序列数据
  19. python文件打开的合法模式组合wr_Python Scapy wrpcap-如何将数据包附加到pcap文件?
  20. 使用SimpleUpdater实现WinForm自动升级

热门文章

  1. 局域网监控软件的功能分析1
  2. 苏州大学计算机在南京就业,江苏这几所学校实力强,就业前景好,赶紧收藏
  3. 基于RNN的中文古诗词生成神经网络实现
  4. linux 设置时区 东一区,关于时区的划分
  5. SpringBoot系列之HATEOAS用法简介
  6. 声速的测量的实验原理和应用_示波器的原理和使用、声速测量实验报告
  7. TFC 2017 腾讯Web前端大会 全场笔记
  8. 靠!原来每日99%都会赚上千上万元的软文核心在这里
  9. mysql配置asp_配置服务器使它支持asp,cgi,php,mysql_MySQL
  10. 2011,仰望那烂漫的冬花