Java Object作为监视器的澄清

时间:2013-10-12 15:12:52

标签: java concurrency jvm monitor

我使用以下资源来获取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)它知道什么线程在等待它直到特殊条件>满足。{等待}

     

c)它知道队列中有谁进入它{entry    设置}

     

那么线程如何成为对象所有者,它必须>获取该对象的锁定!


  

1对象是锁定还是锁定?

     

2 a,b,c是对象状态的一部分或由JVM跟踪(保留记录并将其与对象ID等关联)?

2 个答案:

答案 0 :(得分:1)

Java 中的每个对象都有与之关联的监视器。监视器是一种基本上等同于重入锁的构造;同一个线程可以多次进入监视器,并计算条目数并与出口匹配。

关于“主动”和“被动”对象的结论没有多大意义。 (我不是说他们错了;我说我无法理解你想说的是什么。)

The semantics of monitors in the JVM定义明确,但实现不是,并且可以通过多种方式实现监视器。您的a / b / c中的所有项目都由JVM以JVM作者决定的某种方式跟踪。由于从不使用大多数对象的监视器,因此一种策略是使用与堆分离的监视器表,其中包含带有对象的JVM ID的struct,当前位于监视器内的线程以及条目计数

答案 1 :(得分:1)

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

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

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

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