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