[英]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
异常,以及使用break
, continue
或return
语句在块外传输。)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.