什么是monitor

  monitor直译过来是监视器的意思,专业一点叫管程。monitor是属于编程语言级别的,它的出现是为了解决操作系统级别关于线程同步原语的使用复杂性,类似于语法糖,对复杂操作进行封装。而java则基于monitor机制实现了它自己的线程同步机制,就是synchronized内置锁。

monitor的作用

  monitor的作用就是限制同一时刻,只有一个线程能进入monitor框定的临界区,达到线程互斥,保护临界区中临界资源的安全,这称为线程同步使得程序线程安全。同时作为同步工具,它也提供了管理进程,线程状态的机制,比如monitor能管理因为线程竞争未能第一时间进入临界区的其他线程,并提供适时唤醒的功能。

monitor的组成

  3.1 monitor对象

    monitor对象是monitor机制的核心,它本质上是jvm用c语言定义的一个数据类型。对应的数据结构保存了线程同步所需的信息,比如保存了被阻塞的线程的列表,还维护了一个基于mutex的锁,monitor的线程互斥就是通过mutex互斥锁实现的。

  3.2 临界区

    临界区是被synchronized包裹的代码块,可能是个代码块,也可能是个方法。

  3.3 条件变量

    条件变量和下方wait signal方法的使用有密切关系 。在获取锁进入临界区之后,如果发现条件变量不满足使用wait方法使线程阻塞,条件变量满足后signal唤醒被阻塞线程。 tips:当线程被signal唤醒之后,不是从wait那继续执行的,而是重新while循环一次判断条件是否成立。参考

  3.4 定义在monitor对象上的wait() signal() signalAll()操作

monitorenter操作的目标一定要是一个对象,类型是reference。Reference实际就是堆里的一个存放对象的地址。每个对象(reference)都有一个monitor对应,如果有其它的线程获取了这个对象的monitor(),当前的线程就要一直等待,直到获得 monitor的线程放弃monitor,当前的线程才有机会获得monitor。
如果monitor没有被任何线程获取,那么当前线程获取这个monitor,把monitor的entry count设置为1。表示这个monitor被1个线程占用了.退出monitor时entry count减为0。
当前线程获取了monitor之后,会增加这个monitor的时间计数,来记录当前线程占用了monitor多长时间。

什么是monitor相关推荐

  1. Monitor CodeForces - 846D ——二维前缀和

    Recently Luba bought a monitor. Mon itor is a rectangular matrix of size n × m. But then she started ...

  2. windows下 Source Monitor代码度量工具的使用

    windows下 Source Monitor代码度量工具的使用 引用链接: https://www.cnblogs.com/xuehanyu/p/4520965.html 1.总体介绍 Source ...

  3. C#中使用Monitor类、Lock和Mutex类来同步多线程的执行(转)

    C#中使用Monitor类.Lock和Mutex类来同步多线程的执行 在多线程中,为了使数据保持一致性必须要对数据或是访问数据的函数加锁,在数据库中这是很常见的,但是在程序中由于大部分都是单线程的程序 ...

  4. 转:C#中Monitor对象与Lock关键字的区别分析

    Monitor对象1.Monitor.Enter(object)方法是获取 锁,Monitor.Exit(object)方法是释放锁,这就是Monitor最常用的两个方法,当然在使用过程中为了避免获取 ...

  5. 二维前缀和+差分 HDU6514 Monitor

    Monitor [ HDU - 6514 ] 题目大意:给你个n×m的区域,每个区域被选中标记为1,没被选中标记为0,然后给一些标记的区域,查询若干个区域问是否有0的 一道二维前缀和的题目,想通没什么 ...

  6. 设置树莓派的无线网卡为监听模式(monitor)

    先使用命令查看无线网卡的名字: ifconfig 结果如下: eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500inet 1 ...

  7. Ambari安装之部署 (Metrics Collector和 Metrics Monitor) Install Pending ...问题

    问题详细描述如下:  Metrics Collector的解决办法 正在重新安装 Metrics  Monitor的解决办法 Metrics Collector和 Metrics Monitor 的I ...

  8. 集成服务监控器-green.monitor发布

    在大型企业应用开发中,一个项目经常需要依赖于多个项目集成,经常某个集成服务的升级或者不工作,会导致你所工作的服务也挂掉,甚至影响你的开发流程.你是否还在接到测试团队或者运维团队的某个Bug,而自己花费 ...

  9. Android官方命令深入分析之Device Monitor

    Android Device Monitor是一个提供了图形化界面的可以对Android应用进行调试和分析的独立的工具.Monitor工具不需要IDE环境,比如Android Studio.包括以下工 ...

  10. 文件翻译002片:Process Monitor帮助文档(Part 2)

    [筛选亮点] Process Monitor提供了一些方式来配置筛选器和高亮显示.         筛选器的包括与排除 您能够在筛选器中指定事件的属性,这样就能够令Process Monitor仅显示 ...

最新文章

  1. 深度学习入门 基于Python的理论与实现
  2. 从零入门 FreeRTOS 操作系统之任务调度器
  3. g4900 win7 核显驱动_9代酷睿跑WIN7 你要的主板来了
  4. SAP Fiori 应用 My Appointment - Belonging to me, Search by team, Search by group
  5. 永恒python图片_python 数据词云展示实例(3)- 背景图设置
  6. VC读取PE文件的OEP
  7. Bad version number in .class file问题解决
  8. mysql单列索引和多列索引_MySQL索引使用说明(单列索引和多列索引)
  9. TF-tf.keras.layers.Attention-Attention机制
  10. html5实现拖拽上传图片,JS HTML5拖拽上传图片预览
  11. 文字版--九九乘法表 c语言
  12. Python pdf 转jpg/png工具
  13. trajan 塔杨算法 求割点,割边
  14. 浅谈游戏商业化(一)
  15. 计算机磁盘检查,使用磁盘检查工具进行硬盘诊断
  16. CSS3 Transition
  17. 有利可图网_第一章:有利可图的项目手册
  18. 服务器500系列错误解释
  19. 机械手定位(带角度)的思路及3点计算旋转中心
  20. sql镶嵌查询_SQL语句 - 嵌套查询

热门文章

  1. 在企业工作一年多的几点感悟
  2. maya2011安装方法图文详细教程及Unity下载
  3. Firefox插件的安装及使用方法(持续更新中)
  4. android原生系统裁剪
  5. TidTcpClient总结
  6. html定义子菜单初始为隐藏,需要静心学习的PbootCMS模板制作教程(五)
  7. 《三国空城计》何为真知己真智慧
  8. 蓝桥杯2020年第十一届省赛真题-走方格-java
  9. 开源免费cms---十大主流建站的CMS系统介绍
  10. 电脑怎么加快网页打开速度?加快网速。