[英]Java Object as a monitor clarification
我使用以下资源来获取Java监视器的摘要,
http://www.informit.com/store/concurrent-programming-in-java-design-principles-and-9780201310092
以下是我在Java上下文中的理解摘要,
Monitor是一个授予线程的对象。 那>意味着在Java中说所有对象都是监视器>这意味着每个对象都具有线程感知特征。
线程是一个活动对象。 而其他对象是被动的>但是知道线程.Hence监视器! 在其他方面,被动物体已经变得灵活。
为什么叫“监视器”,因为它监视自己! 从何而来 ? >来自活动对象,即线程
监视器有什么意识?
a)它知道当前访问它的线程。{owner}
b)它知道什么线程正在等待它直到满足特殊条件> {wait set}
c)它知道谁在队列中输入{entry set}
那么一个线程如何成为一个对象所有者,它必须>获取该对象的锁定!
1对象是一个锁还是一个锁?
2在a,b,c之上是对象状态的一部分或由JVM跟踪(保留记录并将其与对象ID等关联)?
Java 中的每个对象都有一个与之关联的监视器。 监视器是一种基本上等同于重入锁的构造; 同一个线程可以多次进入监视器,并计算条目数并与出口匹配。
你对“主动”和“被动”物体的结论没有多大意义。 (我不是说他们错了 ;我说我无法理解你想说的话。)
JVM中监视器的语义是明确定义的,但实现不是,并且可以通过多种方式实现监视器。 您的a / b / c中的所有项目都由JVM以JVM作者决定的某种方式跟踪。 由于大多数对象的监视器从未被使用过,因此一种策略是拥有一个与堆分离的监视器表,其中包含一个带有对象的JVM ID的struct
,当前位于监视器内的线程以及条目计数。
用Java的说法,人们倾向于说每个对象都有一个监视器。 synchronized( anObject )
语句synchronized( anObject )
表示acquire anObject's monitor
。
对象不“知道”当前访问它的线程。 在某个时间点,对象可能在多个线程中处于活动状态。
从语言的角度来看 ,没有办法列出当前使用对象(a)的线程,也没有列出等待它的线程(b和c)。
从JVM的角度来看 ,JVM必须在内部能够执行b和c,但实际上并非如此。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.