在Java中,对象监视器的含义是什么?为什么使用这个词?

2022-08-31 10:45:25

在阅读有关Java线程的文章时,我经常注意到这样一种表达方式:“当前线程是此对象的监视器的所有者”。我明白了意思:线程获得了对对象进行操作的权利。但是我很困惑为什么我们使用短语“对象的监视器”而不是“对象的锁定”?

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


答案 1

但是我很困惑为什么使用“对象的监视器”这个词来表示“对象的锁”?

请参阅ulmangt的答案,以获取解释此上下文中使用的术语“监视器”的链接。请注意:

“显示器是由Per Brinch Hansen和C. A. R. Hoare发明的,并且首先用Brinch Hansen的Concurrent Pascal语言实现。

(来源:维基百科)

为什么使用术语“监视器”而不是“锁定”?严格来说,这些术语确实意味着不同的东西...特别是如果您以最初打算使用的方式使用它们。

  • “锁”是具有获取和释放基元的东西,这些基元保持某些锁属性;例如,独家使用或单个写入器/多个读取器。

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

简而言之,如果一个人是迂腐的“监视器”实际上是一个比“锁”更好的术语来描述Java提供的东西。但在实践中,这两个术语几乎可以互换使用。


答案 2

监视器只是一个对象的术语,其方法可以在多线程环境中安全地使用。

有一篇关于显示器的维基百科文章:

http://en.wikipedia.org/wiki/Monitor_(同步)

如果你向下滚动,它甚至有一个明确关于Java的部分