我看过这个答案,它说明了如何:
在新的内存模型下,当线程 A 写入 volatile 变量 V,而线程 B 从 V 中读取时,在写入 V 时对 A 可见的任何变量值现在都保证对 B 可见。
因此,举个例子:
public class Main {
static int value = -1;
static volatile boolean read;
public static void main(String[] args) {
Thread a = new Thread(() -> {
value = 1;
read = true;
});
Thread b = new Thread(() -> {
while (!read);
System.out.println("Value: " + value);
});
a.start();
b.start();
}
}
尽管(only )value
的非易失性,是否保证对 (从 -1 到 1) 的更改对线程 b 可见?value
read
如果是这样,考虑到为了对另一个线程可见而执行的一堆更改,除了最后一个易失性之外,是否有任何目的更改任何变量?