假设我有一个对可变类类型 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 最后写入的值?
最佳答案
Is thread B guaranteed to observe the value that was last written by thread A?
没有。这相当于:
volatile Foo foo = new Foo();
foo.write(42);
在 foo 为非空之后,所有在 foo 初始分配之前发生的写入都将可见。然而,在那之后,无法保证线程何时会看到 foo.write(42)
的写入发生。
关于java - 通过未修改的原子引用的突变是否可见?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25191804/