1. 程式人生 > >synchronized實現原理及ReentrantLock原始碼

synchronized實現原理及ReentrantLock原始碼

#### synchronized ###### synchronized的作用範圍 ``` public class SynchronizedTest { // 例項方法,方法訪問標誌ACC_SYNCHRONIZED,鎖物件是物件例項 public synchronized void test1(){} // 靜態方法,方法訪問標誌ACC_SYNCHRONIZED,鎖物件是MetaSpace中的Class // 相當於類的全域性鎖,會鎖住所有呼叫該方法的執行緒 public synchronized static void test2(){} public void test3() { //同步程式碼塊,在程式碼塊前增加monitorenter指令,程式碼塊後增加monitorexit指令 SynchronizedTest synchronizedTest = new SynchronizedTest(); synchronized (synchronizedTest) {} // 類鎖,效果等同於鎖靜態方法。程式碼塊前後增加monitorenter、monitorexit指令 synchronized (SynchronizedTest.class) {} } } ``` 可jclasslib檢視Acc_SYNCHRONIZED標誌和monitorenter、monitorexit指令 test1 方法: ``` Access flags: 0x0021[public synchronized] ``` test2 方法: ``` Access flags: 0x0029[public static synchronized] ``` test3方法Code操作碼: ``` 0