Java同步機制之Monitor監視器與syncrhoized實現原理

    轉載請注意原文地址:http://www.cnblogs.com/ygj0930/p/6561667.html html

    一:Monitor工具

      Monitor是一個同步工具,至關於操做系統中的互斥量(mutex),即值爲1的信號量。spa

      它內置與每個Object對象中,至關於一個許可證。拿到許可證便可以進行操做,沒有拿到則須要阻塞等待。操作系統

 

    二:syncrhoized實現原理線程

       syncrhoized又叫作內置鎖,爲何呢?由於使用syncrhoized加鎖的同步代碼塊在字節碼引擎中執行時,實際上是經過鎖對象的monitor的取用與釋放來實現的。由上面咱們直到Monitor是內置於任何一個對象中的,syncrhoized利用monitor來實現加鎖解鎖,故syncrhoized又叫作內置鎖。htm

       如今咱們知道爲何用syncrhoized(lock)來加鎖時,鎖對象能夠是任意對象了:對象

       1:syncrhoized(lock)加鎖時,用到的其實只是lock對象內置的monitor而已;blog

       2:一個對象的monitor是惟一的,至關於一個惟一的許可證。拿到許可證的線程才能夠執行,執行完後釋放對象的monitor才能夠被其餘線程獲取。get

 

       咱們來說解一下syncrhoized加鎖的同步塊的執行過程:同步

       如今假設有代碼塊:  syncrhoized(Object lock){

                                                                         同步代碼...;

                                    }

 

        它在字節碼文件中被編譯爲:monitorenter;//獲取monitor許可證,進入同步塊

                                             同步代碼...

                                             monitorexit;//離開同步塊後,釋放monitor許可證

相關文章
相關標籤/搜索