通过未修改的原子参考突变是否可见?

时间:2014-08-07 20:41:44

标签: java multithreading concurrency java.util.concurrent java-memory-model

假设我有一个可变类类型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 个答案:

答案 0 :(得分:3)

  

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

没有。它等同于:

volatile Foo foo = new Foo();
foo.write(42);

在foo为非null之后,在foo初始赋值之前发生的所有写操作都将可见。之后,无法保证线程何时会看到foo.write(42)的写入。

答案 1 :(得分:1)

没有

通过访问特定的原子实例,你不能简单地使X线程安全。

为了使其成为线程安全的,你必须使底层类本身是线程安全的,而不仅仅是访问它。