首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在同步化的子句中抛出异常的副作用?

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

Stack Overflow用户
提问于 2010-01-07 17:35:57
回答 2查看 20.3K关注 0票数 72

在同步化的子句中抛出异常有什么不明确的副作用吗?锁怎么了?

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

synchronized (lock) {   
    doSomething();       
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-07 17:40:28

我看不到任何副作用。

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

票数 108
EN

Stack Overflow用户

发布于 2010-01-07 18:23:32

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

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

如果块的执行正常完成,则锁被解锁,同步语句正常完成。如果块的执行由于任何原因而突然完成,那么锁将被解锁,然后同步语句出于同样的原因突然完成。

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

票数 44
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2019339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档