【发布时间】:2021-07-15 18:03:59
【问题描述】:
阅读了很多关于易失性、原子性和可见性的内容后,仍然存在一个问题。在跨线程工作之后,当“b”被更新/读取时,“a”始终可见:
int a;
volatile int b;
a = 1; b = 1;
...
// different thread
if (b == 1) // do something with a, which is 1 now
对于作为单独对象的原子变量是否同样适用,以下是否有效?
int a;
AtomicInteger b = new AtomicInteger();
a = 1; b.set(1);
...
// different thread
if (b.get() == 1) // a guaranteed to be 1 here all the time ???
如果答案是否定的,那么它应该可以扩展 AtomicInteger 类并在其中包含“a”,因为 AtomicInteger 包装了一个 volatile。
【问题讨论】:
标签: java visibility atomic volatile