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

标签 java multithreading monitor

在阅读有关 Java 线程的文章时,我经常注意到这样的表述:“当前线程是该对象的监视器的所有者”。我明白了意思:线程获得了对对象的操作权。但是我很疑惑为什么我们用“对象的监视器”而不是“对象的锁”呢?

简而言之,我不知道'monitor'这个词的意思 这个问题可能很奇怪也很简单。但我希望任何人都可以帮助解决它。 3ks

最佳答案

but I am puzzled why use word "the object's monitor" instend of "the object's lock"?

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

"Monitors were invented by Per Brinch Hansen and C. A. R. Hoare, and were first implemented in Brinch Hansen's Concurrent Pascal language."

(来源:Wikipedia)

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

  • “锁”是具有获取和释放原语的东西,它们维护特定的锁属性;例如独家使用或单一作者/多个读者。

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

简而言之,如果要学究气,“监控”实际上是一个比“锁定”更好的术语来描述 Java 提供的功能。但在实践中,这两个术语几乎可以互换使用。

关于java - Java中对象的监视器是什么意思?为什么要用这个词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13517601/

相关文章:

java.lang.ArrayIndexOutOfBoundsException : 2 >= 0 异常

java - 运行jar时的当前目录路径

c++ - 使用 volatile bool 变量进行忙等待

java - 我可以将ConcurrentHashMap与Integer一起用于线程安全计数器吗?

python - 如何避免Django子线程被uWSGI respawn杀死

C#:WAITING变量变为非空

java - 安卓/Java : Is there a way to call the return of the method after a listener triggered?

java - 在航点上创建按钮

java - 追加现有数组

iphone - xCode 4 中的内存监视器 - iPhone