2013-10-12 35 views
0

我用以下資源來獲得與Java監控的總結,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中表示所有對象都是監視器時>這意味着每個對象都具有線程感知的特徵。

線程是一個活動對象。而其他物體是被動的>但知道線程。因此監視器!在其他方面,被動對象被智能化了。

爲什麼稱爲「顯示器」,因爲它監視自己!從何而來 ? >從活動對象即線程

監視器有什麼意識?

一)它知道什麼線程當前訪問它。{所有者}

二)是否知悉線程就可以等待,直到一個特殊的條件是什麼>得到滿足。{等待設定}

三)知道誰在隊列中進入它{條目 設置}

那麼線程怎麼會成爲一個對象所有者,它必須>獲取該對象的鎖!


1物體是鎖或具有鎖定?

2以上a,b,c是對象狀態的一部分或由JVM跟蹤(保留記錄並將其與對象ID等關聯)?

回答

1

Java中的每個對象都有與其關聯的監視器。監視器是一個基本上等價於可重入鎖的構造;同一個線程可以多次輸入一個監視器,並且條目的數量將被計數並與出口相匹配。

關於「主動」和「被動」對象的結論沒有多大意義。 (我不是說他們是錯;我說我不明白你說什麼。)

The semantics of monitors in the JVM是明確的,但是執行不了,而且有監視器可以實施的多種方式。 JVM作者決定以某種方式跟蹤a/b/c中的所有項目。由於絕大多數對象的監視器從未被使用過,所以一種策略是將一個監視器表從堆中分離出來,其中包含對象的JVM ID,當前在監視器內的線程以及條目計數的struct

1
  1. 在Java中的說法,人們往往會說,每個對象監視器。聲明synchronized(anObject)表示acquire anObject's monitor

  2. 對象不知道當前訪問它的線程。在某個時間點,一個對象可能在多個線程中處於活動狀態。

    語言角度來看,沒有辦法列出當前使用對象(a)的線程,也沒有列出等待它的線程(b和c)。

    JVM的角度來看,JVM必須在內部能夠做b和c,但不是真的a。