繁体   English   中英

Java Object作为监视器的澄清

[英]Java Object as a monitor clarification

我使用以下资源来获取Java监视器的摘要,

http://www.informit.com/store/concurrent-programming-in-java-design-principles-and-9780201310092

http://www.artima.com/insidejvm/ed2/threadsynch.html

以下是我在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 ,当前位于监视器内的线程以及条目计数。

  1. 用Java的说法,人们倾向于说每个对象都有一个监视器。 synchronized( anObject )语句synchronized( anObject )表示acquire anObject's monitor

  2. 对象不“知道”当前访问它的线程。 在某个时间点,对象可能在多个线程中处于活动状态。

    语言的角度来看 ,没有办法列出当前使用对象(a)的线程,也没有列出等待它的线程(b和c)。

    JVM的角度来看 ,JVM必须在内部能够执行b和c,但实际上并非如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM