同期ブロックとそのブロック内のどこかに、同期ブロック内にキャッチされない例外がスローされた場合、例外が伝達されたときにロックが解放されますか?(同期ブロック)java同期と例外処理
synchronized(mutex)
{
throw new Exception("");
}
同期ブロックとそのブロック内のどこかに、同期ブロック内にキャッチされない例外がスローされた場合、例外が伝達されたときにロックが解放されますか?(同期ブロック)java同期と例外処理
synchronized(mutex)
{
throw new Exception("");
}
ロックは常に解除されます。 JLS §14.19から
:
「ブロックの実行が正常に完了すれば、ロックは解除 され、ブロックの 実行は、その後、何らかの理由で中途完了した場合、同期文は正常完了する。 ロックが解除され、同期された文は同じ理由で突然 を完了します。
はい、ロックが解除されます。 hereから
:
ロックが同期文(14.18)と同期メソッドの呼び出しとしてリリースされているように、Javaプラットフォームの例外機構は、その同期モデル(§17)と統合されている(§8.4 .3.6、§15.12)は突然完全である。
問題はありません。 実行パスが(リターン、例外...)の場合はロックが解除されます。 詳細はthisを参照してください。
[[同期句の中に例外をスローする副作用の可能性は?](http://stackoverflow.com/questions/2019339/side-effects-of-throwing-an-exception-inside-a-synchronized-句) – Mat