监视器和锁
在JVM的規(guī)范中,有這么一些話:
“在JVM中,每個對象和類在邏輯上都是和一個監(jiān)視器相關(guān)聯(lián)的”
“為了實現(xiàn)監(jiān)視器的排他性監(jiān)視能力,JVM為每一個對象和類都關(guān)聯(lián)一個鎖”
“鎖住了一個對象,就是獲得對象相關(guān)聯(lián)的監(jiān)視器”
從這些話,看出監(jiān)視器和對象鎖好像是一回事,那為何要定義兩個東西,若不一樣,他們的關(guān)系如何?
------------------------------------------------------------------------------------------
監(jiān)視器好比一做建筑,它有一個很特別的房間,房間里有一些數(shù)據(jù),而且在同一時間只能被一個線程占據(jù),
進入這個建筑叫做"進入監(jiān)視器",訪問資源時
進入建筑中的那個特別的房間叫做"獲得監(jiān)視器",可以訪問資源時
占據(jù)房間叫做"持有監(jiān)視器",可以訪問資源,并獲得資源鎖
離開房間叫做"釋放監(jiān)視器",釋放鎖
離開建筑叫做"退出監(jiān)視器". 訪問結(jié)束
如果監(jiān)視器被持有,還有線程要訪問房間,此時線程將在房間外排除等候。
------------------------------------------------------------------------------------------
監(jiān)視器:monitor
鎖:lock(JVM里只有一種獨占方式的lock)
進入監(jiān)視器:monitorenter
離開/釋放監(jiān)視器:monitorexit
(monitorenter和monitorexit是JVM的指令)
擁有者:owner
在JVM里,monitor就是實現(xiàn)lock的方式。
monitorenter就是獲得某個對象的lock(owner是當前線程)
monitorexit就是釋放某個對象的lock
在java中,synchronized是唯一實現(xiàn)同步的東西。對于下面的java程序:
synchronized(obj)
{
... ...
}
在class中將被翻譯成
monitorenter(obj)
...
monitorexit(obj)
結(jié)合我上面對這些英文名詞的介紹,很容易理解monitor和lock的關(guān)系。
“在JVM中,每個對象和類在邏輯上都是和一個監(jiān)視器相關(guān)聯(lián)的”
“為了實現(xiàn)監(jiān)視器的排他性監(jiān)視能力,JVM為每一個對象和類都關(guān)聯(lián)一個鎖”
“鎖住了一個對象,就是獲得對象相關(guān)聯(lián)的監(jiān)視器”
從這些話,看出監(jiān)視器和對象鎖好像是一回事,那為何要定義兩個東西,若不一樣,他們的關(guān)系如何?
------------------------------------------------------------------------------------------
監(jiān)視器好比一做建筑,它有一個很特別的房間,房間里有一些數(shù)據(jù),而且在同一時間只能被一個線程占據(jù),
進入這個建筑叫做"進入監(jiān)視器",訪問資源時
進入建筑中的那個特別的房間叫做"獲得監(jiān)視器",可以訪問資源時
占據(jù)房間叫做"持有監(jiān)視器",可以訪問資源,并獲得資源鎖
離開房間叫做"釋放監(jiān)視器",釋放鎖
離開建筑叫做"退出監(jiān)視器". 訪問結(jié)束
如果監(jiān)視器被持有,還有線程要訪問房間,此時線程將在房間外排除等候。
------------------------------------------------------------------------------------------
監(jiān)視器:monitor
鎖:lock(JVM里只有一種獨占方式的lock)
進入監(jiān)視器:monitorenter
離開/釋放監(jiān)視器:monitorexit
(monitorenter和monitorexit是JVM的指令)
擁有者:owner
在JVM里,monitor就是實現(xiàn)lock的方式。
monitorenter就是獲得某個對象的lock(owner是當前線程)
monitorexit就是釋放某個對象的lock
在java中,synchronized是唯一實現(xiàn)同步的東西。對于下面的java程序:
synchronized(obj)
{
... ...
}
在class中將被翻譯成
monitorenter(obj)
...
monitorexit(obj)
結(jié)合我上面對這些英文名詞的介紹,很容易理解monitor和lock的關(guān)系。
總結(jié)
- 上一篇: 初出茅庐的小李第36篇博客之读取旋转编码
- 下一篇: 廉洁文化 计算机学院,计算机学院“廉洁在