当然,弱比较和交换 可以
充当完整的volatile变量,具体取决于JVM的实现。实际上,如果在某些体系结构上不可能以比普通CAS更高的性能实现弱的CAS,我不会感到惊讶。在这些体系结构上,很可能实现弱CAS与完全CAS完全相同。或者,可能仅仅是因为您的JVM在使弱CAS变得特别快方面没有进行太多优化,因此
当前的 实现只是调用了完整的CAS,因为它实现起来很快,以后的版本会对此进行完善。
JLS只是说一个弱的CAS不会建立 事前 关联,所以根本不能 保证
它引起的修改在其他线程中是可见的。在这种情况下,您所获得的只是保证比较和设置操作是原子的,但不能保证(可能)新值的可见性。这与保证它 不会
被看到是不同的,因此您的测试与此一致。
通常,尝试通过实验避免对与并发相关的行为做出任何结论。有很多变量需要考虑,如果您不遵循JLS保证的正确性,那么您的程序 可能会随时
中断(也许在不同的体系结构上,也许是在稍加提示的更积极的优化下)更改代码的布局,也许是在将来不存在的JVM的未来版本等下)。有 从来没有
一个理由认为你可以逃脱东西是说没有得到保证,因为实验表明,“它的工作原理”。



