JAVA并发-Monitor简介

2023-11-15

什么是Monitor?
1.Monitor是一种用来实现同步的工具
2.与每个java对象相关联,即每个java对象都有一个Monitor与之对应
3.Monitor是实现Sychronized(内置锁)的基础
Monitor的基本结构是什么?
1.Owner字段:初始时为NULL表示当前没有任何线程拥有该monitor record,当线程成功拥有该锁后保存线程唯一标识,当锁被释放时又设置为NULL
2.EntryQ字段:关联一个系统互斥锁(semaphore),阻塞所有试图锁住monitor record失败的线程
3.RcThis字段:表示blocked或waiting在该monitor record上的所有线程的个数
4.Nest字段:用来实现重入锁的计数
5.HashCode字段:保存从对象头拷贝过来的HashCode值(可能还包含GC age)
6.Candidate字段:用来避免不必要的阻塞或等待线程唤醒,因为每一次只有一个线程能够成功拥有锁,如果每次前一个释放锁的线程唤醒所有正在阻塞或等待的线程,会引起不必要的上下文切换(从阻塞到就绪然后因为竞争锁失败又被阻塞)从而导致性能严重下降;Candidate只有两种可能的值0表示没有需要唤醒的线程1表示要唤醒一个继任线程来竞争锁
参考: Java中synchronized的实现原理与应用
Monitor与java对象以及线程是如何关联的?
可以参考我前面的一篇文章: java对象堆内存结构
1.如果一个java对象被某个线程锁住,则该java对象的Mark Word字段中LockWord指向monitor的起始地址
2.Monitor的Owner字段会存放拥有相关联对象锁的线程id
Monitor具体是怎么实现的?
1.Monitor是在jvm底层实现的,底层代码是c++
2.Monitor的enter方法:获取锁
3.Monitor的exit方法:释放锁
4.Monitor的wait方法:为java的Object的wait方法提供支持
5.Monitor的notify方法:为java的Object的notify方法提供支持
6.Monitor的notifyAll方法:为java的Object的notifyAll方法提供支持
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

JAVA并发-Monitor简介 的相关文章

随机推荐

  • 数据库行锁

    数据库行锁 仅作为笔记 码字不易 转载请标明出处 文章目录 数据库行锁 前言 一 数据库行锁 前言 仅作为笔记 一 数据库行锁 两阶段锁 在 InnoDB 事务中 锁是在需要的时候才加上的 但并 是 需要 就立刻释放 而是要等到事务结束时才
  • Mongdb查询 - 比较运算符、逻辑运算符、$type、游标

    目录 一 比较运算符 Mongo查询条件和SQL查询对照表 比较运算符示例 二 逻辑操作符 逻辑操作符示例 not用法 and用法 eq用法 or用法 三 type操作符 四 文档游标 基本操作 游标的执行顺序 limit skip sor
  • CGAL的编译与配置

    CGAL的编译与配置 网上已经有一些配置的步骤 但是在具体配置过程中 发现有很多问题 折腾了两天后终于配置成功 在此做更详细的记录 准备 CGAL CGAL4 7和CGAL4 9的库 分别编译成功了 BOOST boost1 59的版本 C
  • 2022经典前端面试题大全 h5 +cs +js

    一 页面布局 三栏布局 题目 假设高度已知 请写出三栏布局 其中左栏 右栏宽度各为 300px 中间自适应 解答 可以有很多种布局方式 这里列出五种 float布局 absolute布局 flex布局 table布局 grid布局 代码如下
  • mybatis设计大接口的坑以及做法

    先说一些注意事项 1 注 mybatis一个mapper java文件只能对应一个mapper xml文件 所以不能一个mapper java对应两个xml 一个默认的 一个自己拓展的 2 注 如果表中有字段是text selectByEx
  • 可视化笔记1--matplotlib 常见图形绘制1

    可视化笔记1 matplotlib 常见图形绘制1 最近需要使用python实现部分数据的可视化 于是简单学习了下matplotlib绘图功能 基本包括 散点图 折线图 条形图 直方图 饼状图 箱形图等几种常用图形的绘制方式 相应学习笔记分
  • 解决谷歌浏览器无法自动播放HTML文件的声音和视频问题的方法

    首先 先检测一下浏览器是否能支持自动播放 点击下方链接进行检测 https video dev github io can autoplay 本人检测的谷歌浏览器结果是 结果显示 谷歌浏览器不能支持有声自动播放视频和音频 包括内联的视频 但
  • 密码学研究重点

    密码学涵盖了认证 数字签名以及更多基本的安全功能 密码学涉及领域及其宽广 包括计算机安全 高等数学 经济学 量子物理学 民法和刑法 统计学 芯片设计 软件优化 政治 用户界面设计等 0x01 密码学重要性 密码学本身没有价值 必须作为一个系
  • tessract-ocr文本识别系统网页搭建【PHP】

    tessract ocr文本识别系统网页搭建 下面是我搭的网站 OCR文本识别系统 在安装后tesstact ocr后 我找到了一个利用php调用ocr接口的方法 在github上有这样一个项目 https github com thiag
  • 为何boss上的HR要了简历就不回复了?

    不止一个小伙伴在微信上问过我这个问题 今天就来跟大家分享一下出现这种现象的原因 并给我认为在boss上的正确打招呼方式 废话不多说 开始今天的主题分享 出现这一现象一般有以下几种原因 1 简历与岗位需求不匹配 这很好理解 其实就是别人没看上
  • K8s中的Deployment

    Deployment是kubernetes在1 2版本中引入的新概念 用于更好的解决Pod的编排问题 为此 Deployment在内部使用了ReplicaSet来实现目的 我们可以把Deployment理解为ReplicaSet的一次升 级
  • 【精华】批量修改文件夹中的文件名

    转载自 批量修改文件名 原文地址如下 http t csdn cn tGsfz 1 在所需批量修改文件名的文件夹内新建一个改 txt文件 并在新建的txt文件中输入dir gt 1 txt 2 修改新建的改 txt文件的后缀名为 bat 3
  • 虚拟机Ubuntu20.04一招解决无法连接网络问题

    虚拟机Ubuntu20 04一招解决无法连接网络问题 网上试了很多方法都没解决 最后一招解决 简单的网上一堆教程自己找下 此教程适合解决不了的同学 第一步 先关闭虚拟机的ubuntu系统 然后虚拟机 gt 设置 gt 网络适配器 选择NAT
  • 泛型是实体类的集合,根据某一字段排序

    举例 List
  • IDEA将web项目打包成war包

    目录 通用的方式打包 maven方式打包 eclipse版本 https blog csdn net weixin 45859844 article details 119965820 如果要到服务器部署项目 可能需要将项目打成war包 放
  • 程序员必备的思维能力:结构化思维

    在日常工作中 我们时常会碰到这样的情况 有的人讲一件事情的时候逻辑非常混乱 说了很多事情的罗列 却说不到重点 有的人写代码 本身的业务逻辑并没有多复杂 但呈现出的代码却像一堆线团 混乱不堪 无法理解 这些都是典型的缺少结构化思维的表现 导致
  • 挖矿病毒解决

    1 进程 cpu 100 watchdog 2 解决 tmp netstat 矿池 鱼池 sup 进程 文件主程序 crontab l 计划任务 分析脚本 3 如何进来的 web日志 log4j 命令 漏洞 docker yam fastj
  • Mathematica 有关向量与矩阵的函数

    下面是Mathematica中常用的关于向量和矩阵的函数
  • MySQL添加用户、删除用户、授权及撤销权限

    一 创建用户 mysql gt insert into mysql user Host User Password values localhost test password 1234 这样就创建了一个名为 test 密码为 1234 的
  • JAVA并发-Monitor简介

    什么是Monitor 1 Monitor是一种用来实现同步的工具 2 与每个java对象相关联 即每个java对象都有一个Monitor与之对应 3 Monitor是实现Sychronized 内置锁 的基础 Monitor的基本结构是什么