社区
Java SE
帖子详情
!!深入探讨JVM:Java线程同步使用的“监视器”和“对象锁”是不是一回事?他们的关系如何?
cathy97
2005-09-14 05:01:12
在JVM的规范中,有这么一些话:
“在JVM中,每个对象和类在逻辑上都是和一个监视器相关联的”
“为了实现监视器的排他性监视能力,JVM为每一个对象和类都关联一个锁”
“锁住了一个对象,就是获得对象相关联的监视器”
从这些话,看出监视器和对象锁好像是一回事,那为何要定义两个东西,若不一样,他们的关系如何?
...全文
815
8
打赏
收藏
!!深入探讨JVM:Java线程同步使用的“监视器”和“对象锁”是不是一回事?他们的关系如何?
在JVM的规范中,有这么一些话: “在JVM中,每个对象和类在逻辑上都是和一个监视器相关联的” “为了实现监视器的排他性监视能力,JVM为每一个对象和类都关联一个锁” “锁住了一个对象,就是获得对象相关联的监视器” 从这些话,看出监视器和对象锁好像是一回事,那为何要定义两个东西,若不一样,他们的关系如何?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
8 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
xinxiakk
2005-09-15
打赏
举报
回复
监视器就是个放数据的地方,而每个java对象都有锁的。2个概念相差好远
楼上的搞得好清楚啊
cathy97
2005-09-15
打赏
举报
回复
To interhanchi(艰难困苦,玉汝于成!)
你的回答就是《inside JVM》中的原话,我也看过了,就是不明白才提问的啊?
为了实现监视器的监视能力,每个对象和类都要关联一个锁,但为了锁住一个对象,就必须获得一个对象的监视器。 这好像有点“鸡生蛋,蛋生鸡“无限循环的关系。
neulx
2005-09-15
打赏
举报
回复
up
taolei
2005-09-15
打赏
举报
回复
在java中,synchronized是唯一实现同步的东西。对于下面的java程序:
synchronized(obj)
{
... ...
}
在class中将被翻译成
monitorenter(obj)
...
monitorexit(obj)
结合我上面对这些英文名词的介绍,很容易理解monitor和lock的关系。
另外,看中文翻译的文档最好要对照英文原文,尤其是关键名词,翻译过来的中文经常不能正确表达原来的意义。
taolei
2005-09-15
打赏
举报
回复
更正一下:
JVM里的相关指令是monitorenter和monitorexit。上面的entermonitor应为monitorenter,leavemonitor应为monitorexit.
taolei
2005-09-15
打赏
举报
回复
活活,这中文翻译的也真够直接的。
监视器:monitor
锁:lock(JVM里只有一种独占方式的lock)
进入监视器:entermonitor
离开/释放监视器:leavemonitor
(entermonitor和leavemonitor是JVM的指令)
拥有者:owner
在JVM里,monitor就是实现lock的方式。
entermonitor就是获得某个对象的lock(owner是当前线程)
leavemonitor就是释放某个对象的lock
interhanchi
2005-09-14
打赏
举报
回复
我觉得讲的很清楚呀.
监视器好比一做建筑,它有一个很特别的房间,房间里有一些数据,而且在同一时间只能被一个线程占据,进入这个建筑叫做"进入监视器",进入建筑中的那个特别的房间叫做"获得监视器",占据房间叫做"持有监视器",离开房间叫做"释放监视器",离开建筑叫做"退出监视器".
而一个锁就像一种任何时候只允许一个线程拥有的特权.
一个线程可以允许多次对同一对象上锁.对于每一个对象来说,java虚拟机维护一个计数器,记录对象被加了多少次锁,没被锁的对象的计数器是0,线程每加锁一次,计数器就加1,每释放一次,计数器就减1.当计数器跳到0的时候,锁就被完全释放了.
java虚拟机中的一个线程在它到达监视区域开始处的时候请求一个锁.JAVA程序中每一个监视区域都和一个对象引用相关联.
去看一下深入java虚拟机吧,里面这个讲的很清楚!
cathy97
2005-09-14
打赏
举报
回复
up
【深入
Java
虚拟机】
Java
内存模型探讨一.pdf
【深入
Java
虚拟机】
Java
内存模型探讨一.pdf
java
多线程编程实例 (源程序)
java
多线程编程实例
java
多线程编程实例 (源程序)
深入
java
虚拟机 随书源码
深入
java
虚拟机深入讲解
java
vm的原理,利用例子实证。
40道常问的
Java
多线程面试题!.zip
40道常问的
Java
多线程面试题!
深入
Java
虚拟机光盘
深入
Java
虚拟机第二版的光盘内容
Java SE
62,635
社区成员
307,269
社区内容
发帖
与我相关
我的任务
Java SE
Java 2 Standard Edition
复制链接
扫一扫
分享
社区描述
Java 2 Standard Edition
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章