未修改的原子引用中的变异是否可见?

3

假如我有一个指向可变类类型Foo的原子引用:

AtomicReference<Foo> foo = new AtomicReference<Foo>(new Foo());

线程A向Foo对象写入:

foo.get().write(42);

线程B从Foo对象中读取:

int x = foo.get().read();
请注意,原子引用本身永远不会被修改!也就是说,在我的代码中,我没有调用foo.set。 线程B是否保证能观察到线程A最后写入的值?
2个回答

3

线程B能否保证观察到线程A最后写入的值?

不行。这相当于:

volatile Foo foo = new Foo();
foo.write(42);
在foo的初始赋值之前发生的所有写操作,在foo变为非空之后都是可见的。然而,在此之后,不能保证线程何时会看到对foo.write(42)的写入。

1

不可以仅通过将对其特定实例的访问变为原子操作来使X线程安全。

要使其线程安全,您必须使底层类本身线程安全,而不仅仅是对其进行访问。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,