synchronized實現原理及ReentrantLock原始碼
阿新 • • 發佈:2020-12-18
#### 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