java:在一个变量上使用 volatile VS 每个变量

java: using volatile at one variable VS each variable

以下问题:

volatile Object A;
volatile Object B;
volatile Object C;

Thread1:
reads and writes to A-C 

Thread2:
the same as Thread1

所以我的问题是:如果我这样做会更好吗:

Object A;
Object B;
Object C;
volatile boolean memoryBarrier=true;

Thread1:
Before read of A-C: read memoryBarrier
After some write of A-C: write memoryBarrier=true;

Thread2:
the same as Thread1:
Before read of A-C: read memoryBarrier
After some write of A-C: write memoryBarrier=true;

只有一个 volatile 变量更好吗,还是我应该让每个变量都可以 write/read on valatile?

如果我在我的第二个解决方案中每次都对我的 memoryBarrier 写入 true,可以触发写-读-发生在 java 中的关系语义之前吗?我猜它没有被优化掉?

总结如下: 我的解决方案 1 和 2 在语义上是否相同? 解决方案2更好吗? 我是否可以始终将相同的值写入易失性变量以获得 read/write 易失性 happensbefore-relationsship?

该示例非常简单,因此您可能看不到性能方面的太大差异。

我的直觉告诉我,先进行 3 次非易失性内存访问然后进行一次 volatile 访问可能比连续发出 3 次 volatile 访问要好。

这三个 volatile 内存访问是完全有序的(A happens-before B happens-before C)并限制编译器和处理器执行某些优化。非易失性版本在 A、B 和 C 之间建立无先行关系,因此为编译器和处理器提供更多自由来利用内存级 parallelism/instruction-level 并行性。