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


    轉載請注意原文地址: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許可證

                         

                     

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM