在同步化的子句中抛出异常有什么不明确的副作用吗?锁怎么了?
private void doSomething() throws Exception {...}
synchronized (lock) {
doSomething();
}
发布于 2010-01-07 17:40:28
我看不到任何副作用。
锁保证在所有情况下都会被终止(),异常也不例外(双关语)。
发布于 2010-01-07 18:23:32
正如您所希望的那样,锁被正常释放。
作为参考,JLS中保证这种行为的适当部分是§ 14.19。
如果块的执行正常完成,则锁被解锁,同步语句正常完成。如果块的执行由于任何原因而突然完成,那么锁将被解锁,然后同步语句出于同样的原因突然完成。
(“突然完成”是在JLS中的其他地方定义的,包括来自JVM的异常、throw
引发的异常,以及使用break
、continue
或return
语句在块之外传输。)
https://stackoverflow.com/questions/2019339
复制相似问题