深入分析synchronized的實現原理
阿新 • • 發佈:2018-02-19
test 代碼塊 mage this rgs 需要 pub 釋放 javap
基礎概念
synchronized可以保證方法或者代碼塊在運行時,同一時刻只有一個方法可以進入到臨界區,同時可以保證共享變量對內存可見性。
Java中每一個對象都可以作為鎖,這是synchronized實現同步的基礎:
- 普通同步方法,鎖是當前實例對象
- 靜態同步方法,鎖是當前類的class對象
- 同步方法塊,鎖是括號裏面的對象
當一個線程訪問同步代碼塊時,它首先是需要得到鎖才能執行同步代碼,當退出或者拋出異常時必須要釋放鎖。
底層實現原理
如何來實現這個機制呢?我們先看如下一段簡單代碼:
public class SynchronizedTest{ public synchronizedvoid test1(){ } public void test2(){ synchronized(this){ } } public static void main(String []args){ } }
利用javap工具查看生成的class 文件信息來分析synchronize的實現
從上圖可以看出,同步
深入分析synchronized的實現原理