轉載請注意原文地址:http://www.cnblogs.com/ygj0930/p/6561667.html
一:Monitor
Monitor是一個同步工具,相當於操作系統中的互斥量(mutex),即值為1的信號量。
它內置與每一個Object對象中,相當於一個許可證。拿到許可證即可以進行操作,沒有拿到則需要阻塞等待。
二:syncrhoized實現原理
syncrhoized又叫做內置鎖,為什么呢?因為使用syncrhoized加鎖的同步代碼塊在字節碼引擎中執行時,其實是通過鎖對象的monitor的取用與釋放來實現的。由上面我們直到Monitor是內置於任何一個對象中的,syncrhoized利用monitor來實現加鎖解鎖,故syncrhoized又叫做內置鎖。
現在我們知道為什么用syncrhoized(lock)來加鎖時,鎖對象可以是任意對象了:
1:syncrhoized(lock)加鎖時,用到的其實只是lock對象內置的monitor而已;
2:一個對象的monitor是唯一的,相當於一個唯一的許可證。拿到許可證的線程才可以執行,執行完后釋放對象的monitor才可以被其他線程獲取。
我們來講解一下syncrhoized加鎖的同步塊的執行過程:
現在假設有代碼塊: syncrhoized(Object lock){
同步代碼...;
}
它在字節碼文件中被編譯為:monitorenter;//獲取monitor許可證,進入同步塊
同步代碼...
monitorexit;//離開同步塊后,釋放monitor許可證
