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