70 从同步子句中引发异常是否有任何不清楚的副作用?锁怎么了? private void doSomething() throws Exception {...} synchronized (lock) { doSomething(); } java exception synchronized — 尤萨尔 source
104 我没有副作用。 保证在所有情况下都将终止该锁定,并且例外也不是例外(双关语是故意的)。 — 凯乐 source 13 +1以作证,有时例外也不例外: — Andreas Dolk 2010年 1 @KLE错误呢?如果代码抛出Stackoverflow或OutOfMemory,会发生什么? — Pacerier 此页面也值得一看,仅供参考。 — imnd_neel 2014年 就像finally子句一样! — minmaxavg 双关语很棒,+ 1 — Hazok
41 如您所愿,该锁可以正常释放。 作为参考,JLS的保证此行为的适当部分为§14.19: 如果该Block的执行正常完成,则将解锁该锁,并且synced语句将正常完成。如果由于某种原因突然终止了Block的执行,则将锁解锁,然后由于相同的原因而突然完成synced语句。 (“急剧完成”在别处JLS定义为包括从JVM异常,通过引发的异常throw,和使用break,continue或return语句到块外转移。) — 科万 source 1 如果doSomething();抛出java.lang.StackOverflowError会发生什么? — Pacerier