. synchronized Java monitorenter monitorexit. JVM .
Java , ( monitorexit) ( return).
-, , synchronized, try-finally .
finally . , , - , synchronized. , monitorexit. ( , ).
void onlyMe(Foo f) {
synchronized(f) {
doSomething();
}
}
Method void onlyMe(Foo)
0 aload_1
1 dup
2 astore_2
3 monitorenter
4 aload_0
5 invokevirtual #5
8 aload_2
9 monitorexit
10 goto 18
13 astore_3
14 aload_2
15 monitorexit
16 aload_3
17 athrow
18 return
Exception table:
From To Target Type
4 10 13 any
13 16 13 any