Synchronous in method
1  | int i;  | 
javap1
2
3
4
5
6
7
8
9
10
11
12synchronized int fun();
    Code:
       0: aload_0
       1: dup
       // Field i:I
       2: getfield      #2
       5: iconst_1
       6: iadd
       7: dup_x1
       // Field i:I
       8: putfield      #2
      11: ireturn
synchronized method is simply distinguished
in the run-time constant pool by the ACC_SYNCHRONIZED flag
Synchronous in block
1  | int i;  | 
javap1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27void fun(java.lang.Object, int);
    Code:
       0: aload_1
       1: dup
       2: astore_3
       3: monitorenter
       4: aload_0
       5: dup
       // Field i:I
       6: getfield      #2                  
       9: iload_2
      10: iadd
      // Field i:I
      11: putfield      #2
      14: aload_3
      15: monitorexit
      16: goto          26
      19: astore        4
      21: aload_3
      22: monitorexit
      23: aload         4
      25: athrow
      26: return
    Exception table:
       from    to  target type
           4    16    19   any
          19    23    19   any
monitorexit will be executed definitely
If not exit normally, #25 will throw exception


