ObjectMonitor(){
//省略部分代码
_count=0;
_owner=NULL;// 指向持有该ObjectMonitor对象的线程
_WaitSet=NULL;// 等待被唤醒的线程集合
_WaitSetLock=0;
_EntryList=NULL;// 当多个线程竞争时,会先存放到_EntryList中
}
public class L {
public void m2() {
synchronized (this) {
System.out.println("222");
}
}
}
javac L.java
javap -v L.class
......
public void m2();
descriptor: ()V
flags: ACC_PUBLIC
Code:
stack=2, locals=3, args_size=1
0: aload_0
1: dup
2: astore_1
3: monitorenter
4: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
7: ldc #3 // String 222
9: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
12: aload_1
13: monitorexit
14: goto 22
17: astore_2
18: aload_1
19: monitorexit
20: aload_2
21: athrow
22: return
Exception table:
......
public class Li {
public synchronized void m1() {
System.out.println("222");
}
}
javac Li.java
......
public synchronized void m1();
descriptor: ()V
flags: ACC_PUBLIC, ACC_SYNCHRONIZED
Code:
stack=2, locals=1, args_size=1
0: getstatic #2 // Field java/lang/System.out:Ljava/io/PrintStream;
3: ldc #3 // String 222
5: invokevirtual #4 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
8: return
LineNumberTable:
line 8: 0
line 10: 8
}
注意:本文归作者所有,转载请标明出处 http://blog.appcnd.com/post/article46b262c75928bd52