2013-06-03 3 views
5

すべてのプロパティがlongまたはdoubleではないと仮定すると、そのオブジェクトのプロパティの最新の値を原子的に読み取ることが保証されていますか?オブジェクトへの揮発性参照の読み取りは、そのプロパティの最新値のアトミック読み取りを保証しますか?

具体的な例を示します。

public class Foo { 
    private int bar; 

    public int getBar() { 
     return this.bar; 
    } 

    public void setBar(int bar) { 
     this.bar = bar; 
    } 
} 

public class Baz { 
    private volatile Foo foo; 
} 

スレッドAはFooBarプロパティにいつでも書き込むことができます。スレッドBはFooBarプロパティのみを読み取ることができます。スレッドBがBazを通じてBarプロパティにアクセスする場合、最新値Barが読み込まれますか?

+3

ここであなたの人生ははるかに楽になります。 – SLaks

答えて

8

volatileキーワードは、foo参照にのみ適用され、基礎をなすオブジェクトのフィールドには適用されません。

barvolatileとマークする必要があります。

4

良い質問ですが、回答はなしです。揮発性変数の読み込みは、書き込まれた最後の時と同期します。

したがって、nullでないbazは、少なくとも最初の値がfoo.barであることを保証しますが、連続した書き込みは保証しません。もちろん、foo.barが書かれる前に書かれている場合は、baz

関連する問題