1.类
public class LockSyncDemo { LockSyncDemo lockSyncDemo = new LockSyncDemo(); public void m1() { synchronized (lockSyncDemo) { System.out.println("------hello m1-----"); } } public synchronized void m2() { System.out.println("------hello m2-----"); } public static synchronized void m3() { System.out.println("------hello m3-----"); } public static void main(String[] args) { } }
2.运行然后切换到target编译目录进去:
PS D:\workspace\helloworld\pro-maven01\target\classes\com\hourui\bean\demo> javap -v .\LockSyncDemo.class Classfile /D:/workspace/helloworld/pro-maven01/target/classes/com/hourui/bean/demo/LockSyncDemo.class Last modified 2022-6-4; size 999 bytes MD5 checksum 692f94fb8f6f36b49aee4d5a407982b7 Compiled from "LockSyncDemo.java" public class com.hourui.bean.demo.LockSyncDemo minor version: 0 major version: 52 flags: ACC_PUBLIC, ACC_SUPER Constant pool: #1 = Methodref #10.#32 // java/lang/Object."<init>":()V #2 = Class #33 // com/hourui/bean/demo/LockSyncDemo #3 = Methodref #2.#32 // com/hourui/bean/demo/LockSyncDemo."<init>":()V #4 = Fieldref #2.#34 // com/hourui/bean/demo/LockSyncDemo.lockSyncDemo:Lcom/hourui/bean/demo/LockSyncDemo; #5 = Fieldref #35.#36 // java/lang/System.out:Ljava/io/PrintStream; #6 = String #37 // ------hello m1----- #7 = Methodref #38.#39 // java/io/PrintStream.println:(Ljava/lang/String;)V #8 = String #40 // ------hello m2----- #9 = String #41 // ------hello m3----- #10 = Class #42 // java/lang/Object #11 = Utf8 lockSyncDemo #12 = Utf8 Lcom/hourui/bean/demo/LockSyncDemo; #13 = Utf8 <init> #14 = Utf8 ()V #15 = Utf8 Code #16 = Utf8 LineNumberTable #17 = Utf8 LocalVariableTable #18 = Utf8 this #19 = Utf8 m1 #20 = Utf8 StackMapTable #21 = Class #33 // com/hourui/bean/demo/LockSyncDemo #22 = Class #42 // java/lang/Object #23 = Class #43 // java/lang/Throwable #24 = Utf8 m2 #25 = Utf8 m3 #26 = Utf8 main #27 = Utf8 ([Ljava/lang/String;)V #28 = Utf8 args #29 = Utf8 [Ljava/lang/String; #30 = Utf8 SourceFile #31 = Utf8 LockSyncDemo.java #32 = NameAndType #13:#14 // "<init>":()V #33 = Utf8 com/hourui/bean/demo/LockSyncDemo #34 = NameAndType #11:#12 // lockSyncDemo:Lcom/hourui/bean/demo/LockSyncDemo; #35 = Class #44 // java/lang/System #36 = NameAndType #45:#46 // out:Ljava/io/PrintStream; #37 = Utf8 ------hello m1----- #38 = Class #47 // java/io/PrintStream #39 = NameAndType #48:#49 // println:(Ljava/lang/String;)V #40 = Utf8 ------hello m2----- #41 = Utf8 ------hello m3----- #42 = Utf8 java/lang/Object #43 = Utf8 java/lang/Throwable #44 = Utf8 java/lang/System #45 = Utf8 out #46 = Utf8 Ljava/io/PrintStream; #47 = Utf8 java/io/PrintStream #48 = Utf8 println #49 = Utf8 (Ljava/lang/String;)V { com.hourui.bean.demo.LockSyncDemo lockSyncDemo; descriptor: Lcom/hourui/bean/demo/LockSyncDemo; flags: public com.hourui.bean.demo.LockSyncDemo(); descriptor: ()V flags: ACC_PUBLIC Code: stack=3, locals=1, args_size=1 0: aload_0 1: invokespecial #1 // Method java/lang/Object."<init>":()V 4: aload_0 5: new #2 // class com/hourui/bean/demo/LockSyncDemo 8: dup 9: invokespecial #3 // Method "<init>":()V 12: putfield #4 // Field lockSyncDemo:Lcom/hourui/bean/demo/LockSyncDemo; 15: return LineNumberTable: line 3: 0 line 4: 4 LocalVariableTable: Start Length Slot Name Signature 0 16 0 this Lcom/hourui/bean/demo/LockSyncDemo; public void m1(); descriptor: ()V flags: ACC_PUBLIC Code: stack=2, locals=3, args_size=1 0: aload_0 1: getfield #4 // Field lockSyncDemo:Lcom/hourui/bean/demo/LockSyncDemo; 4: dup 5: astore_1 6: monitorenter 7: getstatic #5 // Field java/lang/System.out:Ljava/io/PrintStream; 10: ldc #6 // String ------hello m1----- 12: invokevirtual #7 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 15: aload_1 16: monitorexit 17: goto 25 20: astore_2 21: aload_1 22: monitorexit 23: aload_2 24: athrow 25: return Exception table: from to target type 7 17 20 any 20 23 20 any LineNumberTable: line 7: 0 line 8: 7 line 9: 15 line 10: 25 LocalVariableTable: Start Length Slot Name Signature 0 26 0 this Lcom/hourui/bean/demo/LockSyncDemo; StackMapTable: number_of_entries = 2 frame_type = 255 /* full_frame */ offset_delta = 20 locals = [ class com/hourui/bean/demo/LockSyncDemo, class java/lang/Object ] stack = [ class java/lang/Throwable ] frame_type = 250 /* chop */ offset_delta = 4 public synchronized void m2(); descriptor: ()V flags: ACC_PUBLIC, ACC_SYNCHRONIZED Code: stack=2, locals=1, args_size=1 0: getstatic #5 // Field java/lang/System.out:Ljava/io/PrintStream; 3: ldc #8 // String ------hello m2----- 5: invokevirtual #7 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 8: return LineNumberTable: line 13: 0 line 14: 8 LocalVariableTable: Start Length Slot Name Signature 0 9 0 this Lcom/hourui/bean/demo/LockSyncDemo; public static synchronized void m3(); descriptor: ()V flags: ACC_PUBLIC, ACC_STATIC, ACC_SYNCHRONIZED Code: stack=2, locals=0, args_size=0 0: getstatic #5 // Field java/lang/System.out:Ljava/io/PrintStream; 3: ldc #9 // String ------hello m3----- 5: invokevirtual #7 // Method java/io/PrintStream.println:(Ljava/lang/String;)V 8: return LineNumberTable: line 17: 0 line 18: 8 public static void main(java.lang.String[]); descriptor: ([Ljava/lang/String;)V flags: ACC_PUBLIC, ACC_STATIC Code: stack=0, locals=1, args_size=1 0: return LineNumberTable: line 22: 0 LocalVariableTable: Start Length Slot Name Signature 0 1 0 args [Ljava/lang/String; } SourceFile: "LockSyncDemo.java"