为什么有两个monitorexit

时间:2017-07-22 11:46:56

标签: java synchronization

这是我的java源代码:

public class Father{
     public void  doing(){
     synchronized(this){

  }
}

然后编译,然后运行javap -verbose输出父.class.Here:

  public void doing();
descriptor: ()V
flags: ACC_PUBLIC
Code:
  stack=2, locals=3, args_size=1
     0: aload_0
     1: dup
     2: astore_1
     3: monitorenter
     4: aload_1
     5: monitorexit
     6: goto          14
     9: astore_2
    10: aload_1
    11: monitorexit
    12: aload_2
    13: athrow
    14: return

为什么有两个monitorexit。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

迟到总比不到好。 monitorenter和monitorexit指令旨在捕获和释放监视器。如果在同步块中有异常/错误,将使用第二个MonitorExit。