java同步和异常处理

java同步和异常处理,java,multithreading,exception,synchronization,Java,Multithreading,Exception,Synchronization,如果我有一个同步块,并且在该块内的某个地方抛出了一个未在同步块内捕获的异常,那么当异常从该块传播出去时,是否会放弃锁定?(同步块) 是的,锁松开了 发件人: Java平台的异常机制与其同步模型(§17)集成,因此锁作为同步语句(§14.18)释放,同步方法的调用(§8.4.3.6,§15.12)突然完成。锁始终被释放 来自JLS: “如果块的执行正常完成,则锁定被解除。” 解锁,同步语句正常完成。如果 块的执行由于任何原因突然完成,然后 锁被解锁,然后synchronized语句完成 出于同样的

如果我有一个同步块,并且在该块内的某个地方抛出了一个未在同步块内捕获的异常,那么当异常从该块传播出去时,是否会放弃锁定?(同步块)


是的,锁松开了

发件人:


Java平台的异常机制与其同步模型(§17)集成,因此锁作为同步语句(§14.18)释放,同步方法的调用(§8.4.3.6,§15.12)突然完成。

锁始终被释放

来自JLS:

“如果块的执行正常完成,则锁定被解除。” 解锁,同步语句正常完成。如果 块的执行由于任何原因突然完成,然后 锁被解锁,然后synchronized语句完成 出于同样的原因突然。”


应该没有问题无论执行路径是什么,锁都会被释放(返回、异常…) 有关详细信息,请参阅。

的可能副本
synchronized( mutex )
{
    throw new Exception( "" );
}