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