java同步和异常处理

时间:2011-12-04 12:06:03

标签: java multithreading exception synchronization

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

synchronized( mutex )
{
    throw new Exception( "" );
}

3 个答案:

答案 0 :(得分:5)

锁定始终被释放。

来自JLS §14.19

  

“如果块的执行正常完成,则锁定为   解锁并且synchronized语句正常完成。如果   Block的执行因任何原因突然完成,然后是   锁解锁,然后synchronized语句完成   突然出于同样的原因。“

答案 1 :(得分:3)

是的,锁被释放。

来自here

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

答案 2 :(得分:1)

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