Pergunta

Existem alguns efeitos colaterais claro para lançar uma exceção dentro de uma cláusula sincronizado? O que acontece com o bloqueio?

private void doSomething() throws Exception {...}

synchronized (lock) {   
    doSomething();       
}
Foi útil?

Solução

Não vejo nenhum efeito colateral.

O Bloqueio é garantido para ser terminada em todos os casos, e uma exceção não é excepção (trocadilho intencional).

Outras dicas

Como você esperaria, o bloqueio será liberado normalmente.

Para referência, a seção apropriada dos JLS que garante este comportamento é § 14,19 :

Se a execução do Bloco concluído normalmente, então o bloqueio é desbloqueado ea declaração sincronizado concluído normalmente. Se a execução do Bloco termina abruptamente por qualquer motivo, em seguida, o bloqueio é desbloqueado ea declaração sincronizado em seguida, conclui abruptamente pela mesma razão.

( 'conclusão abrupta' é definido em outro lugar nas JLS para incluir excepções JVM, excepções levantadas por throw, e utilização do break, continue, ou declarações return para transferência para fora do bloco.)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top