监视器和锁

在JVM的规范中,有这么一些话:
“在JVM中,每个对象和类在逻辑上都是和一个监视器相关联的”
“为了实现监视器的排他性监视能力,JVM为每一个对象和类都关联一个锁”
“锁住了一个对象,就是获得对象相关联的监视器”
从这些话,看出监视器和对象锁好像是一回事,那为何要定义两个东西,若不一样,他们的关系如何?
------------------------------------------------------------------------------------------
监视器好比一做建筑,它有一个很特别的房间,房间里有一些数据,而且在同一时间只能被一个线程占据,
进入这个建筑叫做"进入监视器",访问资源时
进入建筑中的那个特别的房间叫做"获得监视器",可以访问资源时
占据房间叫做"持有监视器",可以访问资源,并获得资源锁
离开房间叫做"释放监视器",释放锁
离开建筑叫做"退出监视器". 访问结束
如果监视器被持有,还有线程要访问房间,此时线程将在房间外排除等候。
------------------------------------------------------------------------------------------
监视器:monitor
锁:lock(JVM里只有一种独占方式的lock)
进入监视器:monitorenter
离开/释放监视器:monitorexit
(monitorenter和monitorexit是JVM的指令)
拥有者:owner

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

在java中,synchronized是唯一实现同步的东西。对于下面的java程序:
synchronized(obj)
{
... ...
}
在class中将被翻译成
monitorenter(obj)
...
monitorexit(obj)
结合我上面对这些英文名词的介绍,很容易理解monitor和lock的关系。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值