这是我的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。 谢谢你的帮助。
答案 0 :(得分:0)
迟到总比不到好。 monitorenter和monitorexit指令旨在捕获和释放监视器。如果在同步块中有异常/错误,将使用第二个MonitorExit。