繁体   English   中英

在同步子句中抛出异常的副作用?

[英]Side effects of throwing an exception inside a synchronized clause?

从同步子句中抛出异常是否有任何不明确的副作用? 锁会发生什么?

private void doSomething() throws Exception {...}

synchronized (lock) {   
    doSomething();       
}

我认为没有副作用。

保证在所有情况下都会终止锁定 ,并且异常也不例外(双关语)。

正如您所希望的那样,锁定正常释放。

作为参考,保证此行为的JLS的适当部分是§14.19

如果块的执行正常完成,则解锁并且synchronized语句正常完成。 如果块的执行因任何原因突然完成,则锁定被解锁,然后同步语句突然完成,原因相同。

('突然完成'在JLS的其他地方定义,包括来自JVM的异常, throw异常,以及使用breakcontinuereturn语句在块外传输。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM