2011-12-04 16 views
2

同期ブロックとそのブロック内のどこかに、同期ブロック内にキャッチされない例外がスローされた場合、例外が伝達されたときにロックが解放されますか?(同期ブロック)java同期と例外処理

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

[[同期句の中に例外をスローする副作用の可能性は?](http://stackoverflow.com/questions/2019339/side-effects-of-throwing-an-exception-inside-a-synchronized-句) – Mat

答えて

4

ロックは常に解除されます。 JLS §14.19から

「ブロックの実行が正常に完了すれば、ロックは解除 され、ブロックの 実行は、その後、何らかの理由で中途完了した場合、同期文は正常完了する。 ロックが解除され、同期された文は同じ理由で突然 を完了します。

2

はい、ロックが解除されます。 hereから

ロックが同期文(14.18)と同期メソッドの呼び出しとしてリリースされているように、Javaプラットフォームの例外機構は、その同期モデル(§17)と統合されている(§8.4 .3.6、§15.12)は突然完全である。

1

問題はありません。 実行パスが(リターン、例外...)の場合はロックが解除されます。 詳細はthisを参照してください。