当前位置: 首页 > 面试题库 >

Java中的对象监视器是什么意思?为什么用这个词?

苍宜修
2023-03-14
问题内容

在阅读有关Java线程的文章时,我经常注意到这样的表达:“当前线程是该对象的监视器的所有者”。我的意思是:线程有权在对象上进行操作。但是我很困惑,为什么我们使用“对象的监视器”而不是“对象的锁”?

简而言之,我不知道“监视”一词的含义。这个问题可能很奇怪而且很简单。但我希望任何人都能帮助解决它。3ks


问题答案:

但是我感到困惑的是为什么要在“对象的锁”中使用“对象的监视器”一词呢?

有关在此上下文中使用的解释“监视”一词的链接,请参见ulmangt的答案。注意:

“监视器是由Per Brinch Hansen和CAR Hoare发明的,并且首先以Brinch Hansen的并发Pascal语言实现。

(来源:维基百科)

为什么使用术语“监视器”而不是“锁定”?严格来说,这些术语的含义确实不同……尤其是如果您以最初打算使用的方式使用它们时。

  • “锁”是指具有获取和释放原语的东西,这些原语和原语保持某些锁属性。例如,独占使用或单作者/多读者。

  • “监视程序”是一种机制,可确保在任何给定时间只有一个线程可以执行给定的html" target="_blank">代码段。可以使用锁(和“条件变量”,允许线程等待或向其他线程发送满足条件的通知)来实现此功能,但它不仅仅是锁。实际上,在Java情况下,不能直接访问监视器使用的实际锁。(您不能说“ Object.lock()”来阻止其他线程获取它,就像使用Java Lock实例一样。)

简而言之,如果要学究的话,“ monitor”实际上是比“ lock”更好的术语,用于描述Java提供的特性。但是实际上,这两个术语几乎可以互换使用。



 类似资料:
  • 问题内容: 任何人都可以确认我是否正确地在下面的方法调用中看到了该参数: 作为对象类型的数组?我不记得以前在Java中见过。 问题答案: 它等效于,但允许调用者一次只指定一个值作为参数,编译器将创建一个数组。所以这个电话: 相当于 有关更多信息,请参见varargs功能的文档(在Java 5中引入)。

  • 我正在尝试对函数返回的值发出警报,并且在警报中得到以下信息: 下面是JavaScript代码: 是我试图检查的函数。

  • 问题内容: 我是Go的新手,在浏览其他一些线程时遇到了以下代码行: 含义是什么?它是否指定将在if条件中分配某些内容(因为err似乎正在发生这种情况)?我在Wiki上找不到这种语法的示例,并且我很好奇它的用途。 问题答案: 因为返回两个值,所以如果需要它们中的任何一个,都必须在某个地方接收这些值。该是一个占位符,基本的意思是“我不关心这个特殊的返回值。” 在这里,我们只关心检查错误,而无需对实际的

  • 使用以下方法和构造函数编写一个类MyInts.java。 1- 大小为 25 的整数数组作为私有字段 2-采用整数字符串并将其存储在int数组中的构造函数 3-复制构造函数 4-一个Add方法,它将参数1 MyInt作为参数,并将其添加到调用对象并返回结果。 5-检查2个MyInt变量是否相等的方法是相等的。 6-一个方法compareTo,如果调用对象小于参数,则返回-1,如果调用对象大于参数,

  • 我在Tomcat中调试得到了这个。 它似乎是一个java字节码描述符,但我已经查找了引用https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-4.html而且没有字段描述符“R”。 任何答案都将不胜感激!

  • 问题内容: Java并发编程中所指的监视器是什么? 当我看到“每个对象都关联了一个监视器”时,这是什么意思? 这是一个特殊的对象吗? 问题答案: 监视器是控制对对象的并发访问的机制。 这使您可以执行以下操作: 线程1: 线程2: 这样可以防止线程1和2同时访问受监视(同步)的部分。一个将启动,并且监视器将阻止另一个在第一个完成之前访问该区域。 这不是一个特殊的对象。它的同步机制位于类层次结构的根目