java同步和exception处理

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

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

锁定始终被释放。

来自JLS§14.19 :

“如果块的执行正常完成,则锁定被解锁并且同步语句正常完成。如果块的执行因任何原因突然完成,则锁定被解锁,同步语句因为同样的原因而突然完成。”

是的,锁被释放了。

从这里 :

Java平台的exception机制与其同步模型(第17节)集成在一起,因此锁定作为同步语句(第14.18节)发布,同步方法(第8.4.3.6节,第15.12节)的调用突然完成。

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