0

同期されたメソッドが例外をスローした場合、そのスローの前に行われたメンバーの書き込みは他のスレッドに表示されますか?例えば

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が示されているように例外をスローする場合、その場合、xの最新の値がメインメモリにフラッシュされ、そのオブジェクトのfooに入るときにt2に表示されますか?

4

1 に答える 1

2

はい、変更は引き続き表示されます-同期ブロックを終了し、プロセスでモニターを解放します。メモリモデルは、それがどのように発生するかを気にしません-発生するだけですJLSセクション17.4.4の観点からは、これは依然として「モニターでのロック解除アクション」であるため、同じモニターでの次のアクションと同期します。

于 2012-04-28T12:56:41.367 に答える