簡體   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