2012-04-28 18 views
0

同期メソッドが例外をスローすると、そのスローの前に行われたメンバー書き込みが他のスレッドから見えるようになりますか?例えば。Java:同期メソッドの例外と書き込みの可視性

class Foo 
{ 
    private int x; 

    public synchronized void foo() 
    { 
     x++; 
     // some other code using x that throws RTE for a specific thread 
    } 
} 

のFooのオブジェクトがスレッドT1およびT2の間で共有され、示されるようにT1は例外をスローしている場合ときに、それがT2に見えますように、その場合には、xの最新の値をメインメモリにフラッシュされますそのオブジェクトのfooを入力しますか?

+1

'foo'メソッドの同期を意図していると思いますか? –

+0

@Jon Skeetおっと!変更を加えました。どうも。 – shrini1000

+1

あなたのメソッドの使用方法の情報を格納しているスタックを維持すると、次に他のスレッドが実行されたときに次回は挑戦的に、最後に何が起こったのかを知ることができます。 –

答えて

2

はい、変更はまだ表示されます。まだ同期ブロックを終了し、プロセスでモニタを解放します。メモリモデルはその処理方法に気を付けません。になります。それはまだJLS section 17.4.4という用語で "モニターのロック解除アクション"なので、同じモニター上の次のアクションと同期します。

関連する問題