在同步子句中引发异常的副作用?
2022-08-31 13:28:26
从同步子句中引发异常是否存在任何不清楚的副作用?锁会发生什么变化?
private void doSomething() throws Exception {...}
synchronized (lock) {
doSomething();
}
从同步子句中引发异常是否存在任何不清楚的副作用?锁会发生什么变化?
private void doSomething() throws Exception {...}
synchronized (lock) {
doSomething();
}
我没有看到任何副作用。
在所有情况下,锁都保证被终止,并且例外不是例外(双关语)。
正如您所希望的那样,锁定正常释放。
作为参考,JLS中保证此行为的适当部分是§ 14.19:
如果 Block 的执行正常完成,则锁定将解锁,同步语句将正常完成。如果 Block 的执行由于任何原因突然完成,则锁定将被解锁,然后同步语句会出于同样的原因突然完成。
(“突然完成”在 JLS 的其他地方定义,包括来自 JVM 的异常、由 引起的异常以及使用 、 或 语句在块外部传输。throw
break
continue
return