1. 程式人生 > >深入分析synchronized的實現原理

深入分析synchronized的實現原理

test 代碼塊 mage this rgs 需要 pub 釋放 javap

基礎概念

  synchronized可以保證方法或者代碼塊在運行時,同一時刻只有一個方法可以進入到臨界區,同時可以保證共享變量對內存可見性。

  Java中每一個對象都可以作為鎖,這是synchronized實現同步的基礎:

    1. 普通同步方法,鎖是當前實例對象
    2. 靜態同步方法,鎖是當前類的class對象
    3. 同步方法塊,鎖是括號裏面的對象

  當一個線程訪問同步代碼塊時,它首先是需要得到鎖才能執行同步代碼,當退出或者拋出異常時必須要釋放鎖。

底層實現原理

如何來實現這個機制呢?我們先看如下一段簡單代碼:

public class SynchronizedTest{
    public synchronized
void test1(){ } public void test2(){ synchronized(this){ } } public static void main(String []args){ } }

利用javap工具查看生成的class 文件信息來分析synchronize的實現

技術分享圖片

  從上圖可以看出,同步

深入分析synchronized的實現原理