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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (15)

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

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

提问于
用户回答回答于

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

请参阅ulmangt对解释在此上下文中使用的术语“监视器”的链接的回答。

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

  • “锁”是获取和释放原语的东西,它们保持某些锁定属性; 例如独家使用或单个作者/多个阅读器。
  • “监视器”是一种机制,可确保在任何给定时间只有一个线程可以执行给定的代码段(或多个段)。这可以通过使用锁来实现(以及“条件变量”,允许线程等待或发送通知给条件满足的其他线程),但它不仅仅是一个锁。事实上,在Java情况下,监视器使用的实际锁定不能直接访问。(你不能说“Object.lock()”来阻止其他线程获取它......就像你可以用Java Lock实例一样。)

简而言之,如果一个人是迂腐的,那么“监视”实际上是一个比“锁定”更好的术语,用于描述Java提供的特性。但实际上,这两个术语几乎可以互换使用。

扫码关注云+社区