1.class public LOK; 2 3.super Ljava/lang/Object; 4 5.method public static run(Ljava/lang/Object;Ljava/lang/Object;)V 6 .registers 3 7 8 invoke-static {v1, v2}, LOK;->runNoMonitors(Ljava/lang/Object;Ljava/lang/Object;)V 9 10 invoke-static {v1, v2}, LOK;->runStraightLine(Ljava/lang/Object;Ljava/lang/Object;)V 11 12 invoke-static {v1, v2}, LOK;->runStraightLine2(Ljava/lang/Object;Ljava/lang/Object;)V 13 14 invoke-static {v1, v2}, LOK;->runBalancedJoin(Ljava/lang/Object;Ljava/lang/Object;)V 15 16 return-void 17 18.end method 19 20 21 22.method public static runNoMonitors(Ljava/lang/Object;Ljava/lang/Object;)V 23 .registers 3 24 25 invoke-static {}, LMain;->assertIsManaged()V 26 27 return-void 28 29.end method 30 31.method public static runStraightLine(Ljava/lang/Object;Ljava/lang/Object;)V 32 .registers 3 33 34 invoke-static {}, LMain;->assertIsManaged()V 35 36 monitor-enter v1 # 1 37 monitor-enter v2 # 2 38 39 monitor-exit v2 # 2 40 monitor-exit v1 # 1 41 42 return-void 43 44.end method 45 46.method public static runStraightLine2(Ljava/lang/Object;Ljava/lang/Object;)V 47 .registers 3 48 49 invoke-static {}, LMain;->assertIsManaged()V 50 51 monitor-enter v1 # 1 52 monitor-enter v2 # 2 53 54 # No-op move should not invalidate locking information. 55 move-object v2, v2 56 57 monitor-exit v2 # 2 58 monitor-exit v1 # 1 59 60 return-void 61 62.end method 63 64.method public static runBalancedJoin(Ljava/lang/Object;Ljava/lang/Object;)V 65 .registers 3 66 67 invoke-static {}, LMain;->assertIsManaged()V 68 69 monitor-enter v1 # 1 70 71 if-eqz v2, :Lnull 72 73:LnotNull 74 75 monitor-enter v2 # 2 76 goto :Lend 77 78:Lnull 79 monitor-enter v2 # 2 80 81:Lend 82 83 monitor-exit v2 # 2 84 monitor-exit v1 # 1 85 86 return-void 87 88.end method 89