`
JAVA天地
  • 浏览: 657889 次
  • 性别: Icon_minigender_1
  • 来自: 太原
文章分类
社区版块
存档分类
最新评论

经典解释监视器和对象锁

阅读更多

cathy97问:

在JVM的规范中,有这么一些话:
“在JVM中,每个对象和类在逻辑上都是和一个监视器相关联的”
“为了实现监视器的排他性监视能力,JVM为每一个对象和类都关联一个锁”
“锁住了一个对象,就是获得对象相关联的监视器”

从这些话,看出监视器和对象锁好像是一回事,那为何要定义两个东西,若不一样,他们的关系如何?

interhanchi的解释:

我觉得讲的很清楚呀.
监视器好比一做建筑,它有一个很特别的房间,房间里有一些数据,而且在同一时间只能被一个线程占据,进入这个建筑叫做"进入监视器",进入建筑中的那个特别的房间叫做"获得监视器",占据房间叫做"持有监视器",离开房间叫做"释放监视器",离开建筑叫做"退出监视器".
而一个锁就像一种任何时候只允许一个线程拥有的特权.
一个线程可以允许多次对同一对象上锁.对于每一个对象来说,java虚拟机维护一个计数器,记录对象被加了多少次锁,没被锁的对象的计数器是0,线程每加锁一次,计数器就加1,每释放一次,计数器就减1.当计数器跳到0的时候,锁就被完全释放了.

java虚拟机中的一个线程在它到达监视区域开始处的时候请求一个锁.JAVA程序中每一个监视区域都和一个对象引用相关联.

去看一下深入java虚拟机吧,里面这个讲的很清楚!

taolei的解释:

活活,这中文翻译的也真够直接的。
监视器:monitor
锁:lock(JVM里只有一种独占方式的lock)
进入监视器:entermonitor
离开/释放监视器:leavemonitor
(entermonitor和leavemonitor是JVM的指令)
拥有者:owner

在JVM里,monitor就是实现lock的方式。
entermonitor就是获得某个对象的lock(owner是当前线程)
leavemonitor就是释放某个对象的lock

分享到:
评论

相关推荐

    C#多线程监视器程序

    摘要:C#源码,系统相关,多线程,监视器 一个适合初学者参考学习的C#多线程监视器程序,创建3个线程,模拟多线程运行,并绑定TestRun方法,定义线程的绑定方法,在同步对象上获取排他锁,模拟做一些耗时的工作。

    java并发编程理论基础精讲

    对象锁和监视器: 介绍对象锁的概念,解释如何使用 synchronized 关键字来实现对象级别的同步。 线程间通信: 详细讲解多线程之间如何进行通信,包括等待和通知机制、线程间的数据传递等。 死锁和解决: 介绍死锁的...

    synchronized ReentrantLock volatile Atomic 原理分析.docx

    执行monitorenter指令时需要先获得对象的锁(每个对象有一个监视器锁monitor),如果这个对象没被锁或者当前线程已经获得此锁(也就是重入锁),那么锁的计数器+1。如果获取失败,那么当前线程阻塞,直到锁被对另...

    Java 之 synchronized实现机制(monitor)及其优化(CAS操作、Java对象头、偏向锁).docx

    使用内建锁(synchronized)进行同步,关键在于要获取指定锁对象monitor对象...这个获取过程是互斥的,即同一时刻只有一个线程能够获取到对象的monitor监视器。 通常一个monitorenter指令会包含若干个monitorexit指令。

    Unity 复古恐怖游戏开发模版源码资源 Assets Retro Horror Template v2.3.1

    Retro Horror Template 是 Unity 最完整的框架,...状态监视器 键盘/游戏手柄支持 低健康动画和运动减少 包括枪、霰弹枪、突击步枪和刀武器 简单的电影播放器 爬梯子 攀爬障碍 敌人抢夺和终结者 音乐处理系统 攻击连击

    Oracle Apex Database Monitor:Oracle Apex 数据库监视器-开源

    基于 APEX 4.1 的 Oracle 数据库监视器。 数据库监控功能: - 实例 - SGA - PGA - 数据库参数 - 缓冲池保留候选 - 版本和补丁实时监控 - 锁 - DDL 锁 - DML 锁 - 库缓存锁 - 等待库缓存 Pin - 会话浏览器 - SQL 语句...

    Java基础知识大全《自学宝典》

    同步监视器:由一个类(任意类)的对象来充当.哪个线程获取此监视器,谁就执行大括号里被同步的代码,俗称:锁 * 要求:所有的线层必须共用同一把锁! * 注:在实现的方式中,考虑同步的话,可以使用this;继承的方式,慎用 * ...

    HotspotOverview.pdf

    *每一个java对象都是一个潜在的monitor(监视器) >synchronized 关键字 *所有现代JVM虚拟机都包含light-weight锁  >避免关联一个系统互斥信号量或者每个对象的条件变量(heavy-weight lock)  >当没有竞争时...

    深析Synchronized关键字(小白慎入,深入jvm源码,两万字长文)

    目录一、synchronized基础1.1synchronized的使用1.1示例1.2验证1.2.1 普通方法和代码块中使用this是同一个监视器(锁),即某个具体调用该代码的对象1.2.2 静态方法和代码块中使用该类的class对象是同一个监视器,...

    java核心面试

    (5) 释放对象监视器的锁 (unlock) spring框架原理 10. spring工作机制及为什么要用? 1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。 2....

    java核心面试技术点

    (5) 释放对象监视器的锁 (unlock) spring框架原理 10. spring工作机制及为什么要用? 1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。 2....

    NET多线程同步方法详解

    2. 监视器(Monitor)和互斥锁(lock) 3. 读写锁(ReadWriteLock) 4. 系统内核对象 1) 互斥(Mutex), 信号量(Semaphore), 事件(AutoResetEvent/ManualResetEvent)2) 线程池 除了以上的这些对象之外实现线程...

    java 锁 Lock接口详解.docx

    这些变量在用法上与使用 Object.wait 访问的隐式监视器类似,但提供了更强大的功能。需要特别指出的是,单个 Lock 可能与多个 Condition 对象关联。为了避免兼容性问题,Condition 方法的名称与对应的 Object 版本中...

    shushu1234#articles-backup#2018-08-16-JCP-线程安全性1

    更多关于 Synchronized 修饰的查看:Java并发-线程安全性每个Java对象都可以用做一个实现同步的锁,这些锁被称为内置锁或监视器锁(Monitor

    JAVA_API1.6文档(中文)

    java.util.concurrent.locks 为锁和等待条件提供一个框架的接口和类,它不同于内置同步和监视器。 java.util.jar 提供读写 JAR (Java ARchive) 文件格式的类,该格式基于具有可选清单文件的标准 ZIP 文件格式。 ...

    30天搞定Java–day20

    文章目录每日一考和复习Java常用类字符串相关的类String类String的特性String...同步监视器:可以是任意一个对象,但必须唯一,即多个线程共用同一把锁 共享数据:多个线程共用的数据 sleep()和wait()的区别 1.sleep

    Java虚拟机

    这本书的内容是帮你全面了解java虚拟机,本书第1版两年内印刷近10次,98%以上的评论全部为5星级的好评,是整个Java图书领域公认的经典著作和超级畅销书,繁体版在台湾也十分受欢迎。第2版在第1版的基础上做了很大的...

    Java多线程编程

    包括java的Thread类,同步块(synchronized),可重入锁,Object方法以及对象监视器等内容。

    Java并发编程实战

    4.2.1 Java监视器模式 4.2.2 示例:车辆追踪 4.3 线程安全性的委托 4.3.1 示例:基于委托的车辆追踪器 4.3.2 独立的状态变量 4.3.3 当委托失效时 4.3.4 发布底层的状态变量 4.3.5 示例:发布状态的车辆追踪...

Global site tag (gtag.js) - Google Analytics