Java同步和异常处理

sha*_*awn 3 java multithreading synchronization exception

如果我有一个同步块,并且在该块内的某个位置抛出了一个异常,而该异常未捕获到同步块中,那么当异常传播到该异常之外时,该锁会被放弃吗?

synchronized( mutex )
{
    throw new Exception( "" );
}
Run Code Online (Sandbox Code Playgroud)

oli*_*ren 5

锁始终被释放。

根据JLS§14.19

“如果Block的执行正常完成,则锁将被解锁,并且同步语句将正常完成。如果Block由于某种原因而突然完成,则锁将被解锁,然后由于相同的原因而突然完成同步语句。”