首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >监视器和锁的澄清

监视器和锁的澄清
EN

Stack Overflow用户
提问于 2015-11-19 21:24:44
回答 2查看 357关注 0票数 2

我把同步的概念理解为: Java中的每个对象都有一个监视器和一个锁。锁是一个可以被线程获取或释放的实体,而监视器是一个实例的机制,它决定了线程是否可以获得对象上的锁。

我想澄清一下下面的例子。首先,我想创建两个对象:

代码语言:javascript
复制
  MyClass obj1 = new MyClass();
  MyClass obj2 = new MyClass();

是否每个实例都有自己的监视器和锁?还是共享的?

如果我在一个类上同步:

代码语言:javascript
复制
  synchronized (MyClass.class) {
     ...
  }

它会有什么样的表现?此同步是否会阻止获取obj1和obj2锁?如果有,Java中有没有锁的层次结构?

后续:正确的说法是“对象的监视器”还是“对象的锁”?

EN

回答 2

Stack Overflow用户

发布于 2015-11-19 21:47:22

Java中的每个对象都有一个监视器和一个锁。

这听起来不太对劲。每个对象都有一个锁。监视器是一个过去的想法,从来没有获得太多的吸引力,但回到Java被创建时,实现者认为监视器将是下一个大事件。

将每个实例都有自己的.锁上了?

是。

如果我在一个类上同步...它会有什么样的表现?

类是一个对象。

这些对象中的每一个都有自己的锁,并且它们的锁根本不相互作用。

票数 2
EN

Stack Overflow用户

发布于 2015-11-19 21:47:34

如果我在一个类上同步...它会有什么样的表现?此同步是否会阻止获取obj1和obj2锁?

如果您在MyClass.class上进行同步,则只会与在MyClass.class上进行同步的其他尝试同步。因此,锁定obj1obj2将不起作用。

如果有,

中有没有锁的层次结构?

不,Java中没有锁层次结构。

正确的说法是“对象的监视器”还是“对象的锁”?

通常,人们在谈论同步时只提到“对象的锁”。当你开始使用wait()notify()时,监视器就开始发挥作用了,但那是另一个话题。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33805213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档