monitor概念

管程,监视器。在操作系统中,存在着semaphore和mutex,即信号量和互斥量,使用基本的mutex进行开发时,需要小心的使用mutex的down和up操作,否则容易引发死锁问题。为了更好的编写并发程序,在mutex和semaphore基础上,提出了更高层次的同步原语,实际上,monitor属于编程语言的范畴,C语言不支持monitor,而java支持monitor机制。

一个重要特点是,在同一时间,只有一个线程/进程能进入monitor所定义的临界区,这使得monitor能够实现互斥的效果。无法进入monitor的临界区的进程/线程,应该被阻塞,并且在适当的时候被唤醒。显然,monitor作为一个同步工具,也应该提供这样管理线程/进程的机制。

monitor这个机制之所以被称为:更高级的原语,它不可避免的需要对外屏蔽这些机制,并且在内部实现这些机制,使得monitor成为一个简洁易用的借口。

monitor基本元素

临界区

monitor对象和锁

条件变量以及定义在monitor对象上的wait,signal操作

使用monitor主要是为了互斥进入临界区,为了能够阻塞无法进入临界区的进程,线程,需要一个monitor object来协助,这个object内部会有相应的数据结构,例如列表,用来保存被阻塞的线程;同时由于monitor机制本质是基于mutex原语的,所以object必须维护一个基于mutex的锁。

此外,为了在适当的时候能够阻塞和唤醒 进程/线程,还需要引入一个条件变量,这个条件变量用来决定什么时候是“适当的时候”,这个条件可以来自程序代码的逻辑,也可以是在 monitor object 的内部,总而言之,程序员对条件变量的定义有很大的自主性。不过,由于 monitor object 内部采用了数据结构来保存被阻塞的队列,因此它也必须对外提供两个 API 来让线程进入阻塞状态以及之后被唤醒,分别是 wait 和 notify。

monitor在java中的实现

临界区的圈定

被synchronized关键字修饰的方法,代码块,就是monitor机制的临界区

monitor object

在上述synchronized关键字被使用时,往往需要指定一个对象与之关联,例如synchronized(this),总之,synchronized需要管理一个对象,这个对象就是monitor object。

monitor机制中,monitor 我不检测题充当着维护mutex和wait, signalAPI来管理线程的阻塞和唤醒。

Java 对象存储在内存中,分别分为三个部分,即对象头、实例数据和对齐填充,而在其对象头中,保存了锁标识;同时,java.lang.Object 类定义了 wait(),notify(),notifyAll() 方法,这些方法的具体实现,依赖于一个叫 ObjectMonitor 模式的实现,这是 JVM 内部基于 C++ 实现的一套机制,基本原理如下所示:

当一个线程需要获取 Object 的锁时,会被放入 EntrySet 中进行等待,如果该线程获取到了锁,成为当前锁的 owner。如果根据程序逻辑,一个已经获得了锁的线程缺少某些外部条件,而无法继续进行下去(例如生产者发现队列已满或者消费者发现队列为空),那么该线程可以通过调用 wait 方法将锁释放,进入 wait set 中阻塞进行等待,其它线程在这个时候有机会获得锁,去干其它的事情,从而使得之前不成立的外部条件成立,这样先前被阻塞的线程就可以重新进入 EntrySet 去竞争锁。这个外部条件在 monitor 机制中称为条件变量。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

java monitor怎么使用_Java monitor机制使用方法解析相关推荐

  1. java字符串的用法_Java字符串的重要方法的使用实例

    String类将是您存储和处理语言的主要工具之一,本篇文章将带领大家对Java字符串的方法有个基础的认识,了解他的功能使用方法. 本文摘自千锋教育编著的<Java语言程序设计>,如需转载请 ...

  2. java异常详细讲解_Java异常处理机制的详细讲解和使用技巧

    一起学习 1. 异常机制 1.1 异常机制是指当程序出现错误后,程序如何处理.具体来说,异常机制提供了程序退出的安全通道.当出现错误后,程序执行的流程发生改变,程序的控制权转移到异常处理器. 1.2 ...

  3. java class 生成对象_Java反射机制(创建Class对象的三种方式)

    1:SUN提供的反射机制的类: java.lang.Class java.lang.reflect.Constructor java.lang.reflect.Field java.lang.refl ...

  4. java 反射的弊端_java反射机制的一些学习心得小结

    概述 之前在了解Spring的类加载机制的时候,了解了java的反射机制.但是,我对反射理解一直不深.也一直有点疑惑:Spring为什么利用反射创建对象?直接new对象和依靠反射创建对象有什么区别?什 ...

  5. java 反射执行语句_JAVA反射机制

    JAVA反射机制定义: JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法:对于任意一个对象,都能够调用它的任意一个方法和属性:这种动态获取的信息以及动态调用对象的方法的 ...

  6. java 反射data类型_java反射机制系列之初识Java Reflection

    烈火建站学院(LieHuo.Net)JAVA文档 JAVA 反射机制是指Java程序可以在执行期载入,探知,使用编译期间完全未知的classes.这句话可能有点难以理解,我们可以通过一个例子来看.在 ...

  7. java 操作属性值_java反射机制根据属性名获取属性值的操作

    一.考虑安全访问范围内的属性,没有权限访问到的属性不读取 /** * 根据属性名获取属性值 * * @param fieldName * @param object * @return */ priv ...

  8. java反射的优缺点_Java反射机制的优缺点

    这篇文章达内长沙java培训的老师想和大家聊一聊Java反射机制.首先我们先来看看它的定义:Java反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够 ...

  9. java 反射 工厂模式_Java反射机制demo(七)—反射机制与工厂模式

    Java反射机制demo(七)-反射机制与工厂模式 工厂模式 简介 工厂模式是最常用的实例化对象模式. 工厂模式的主要作用就是使用工厂方法代替new操作. 为什么要使用工厂模式?直接new不好吗? 直 ...

  10. java 反射的弊端_Java反射机制的缺点

    反射的用途 Uses of ReflectionReflection is commonly used by programs which require the ability to examine ...

最新文章

  1. boost::python::detail::is_string_literal相关的测试程序
  2. wireMock快速伪造restful服务
  3. spring源码编译和导入eclipse
  4. MyBatis-Plus-Generator配置
  5. 在Keil5中创建MM32工程
  6. 服务器搬迁方案_服务器搬迁方案
  7. Python利用GUI界面制作B站弹幕分析工具
  8. android直播sdk+美颜,短视频SDK,美颜SDK,直播SDK_提供开放API接口
  9. 微信开发者工具上传照片后下载图片一直报40007:invalid media_id hint: [UUtO4a0341d142] rid: 5fd84e4d-5a3
  10. 泛函极值问题与变分法
  11. SpringBoot+Vue实现简单用户管理平台第一篇(后端接口设计)
  12. 携职教育:四川2022年人力资源管理师考试报名通知
  13. Week15 实验 B - ZJM 的本领 CodeForces - 499A
  14. xampp php搭建失败,ThinkPHP框架搭建及常见问题(XAMPP安装失败、Apache/MySQL启动失败),thinkphpxampp...
  15. c语言十全十美游戏规则,十全十美游戏
  16. 在键盘上输入数n,编程计算sum=1!+2!+··· + n!的结果
  17. 《中国互联网发展报告(2018)》发布 大数据市场交易旺盛
  18. 数据库新增修改和删除
  19. STM32F767 (基础)CubeMX参数设置之RCC
  20. 剑指Offer(10)有环链表 翻转链表

热门文章

  1. vue 电视看板_基于Vue的拖放看板
  2. 基站定位(Google API)
  3. e路航LH900N导航仪凯立德最新版本地图更新方法
  4. lollipop中文_lollipop的中文解释_lollipop的读音_lollipop的双语例句 - 英语词典
  5. 论文笔记:基于特征选择与增量学习的非侵入式电动自行车充电辨识方法
  6. 恶意代码分析实战——高级反汇编
  7. ImportError: cannot import name '_validate_lengths'
  8. 高并发分布式场景下的应用---分布式锁
  9. 推荐五款好用的项目管理软件
  10. 闲的没事,自己动手修改上兴3.2源代码