这个例子应该是说,这里的两种情况,都是满足happens-before consistency的,但是不满足sequential consistency的。
你往前面看看17.4. Memory Model,有这个前提,应该好理解一点。
Example 17.4.5-1 第一个例子应该是说明,在两个线程没有同步保障的情况下,对共享变量B和A的read,是没有happens-before保证的,谁都可以read到对方write之前的value。
Example 17.4.5-1 第二个例子应该是说明,在两个线程没有同步保障的情况下,任何一方,也都可能read到对方write之后的value。只不过,这里还发生了redordering(可能是编译器优化,在Memory Model中提到了)。
这里的两个例子,都是给出了看起来不合理,但是在多线程中,并不违反Happens-before的情况(或者说,这里也根本没有任何Happens-before保证)。
而如果有同步,这两种情况,应该都不会发生。
PS:Memory Model说明了非常关键的一点,“To determine if the actions of threadtin an execution are legal, we simply evaluate the implementation of threadtas it would be performed in a single-threaded context”
结合上下文,应该理解为:所谓“(一段代码)合法的执行(结果)”,是指假设这段代码在单线程执行的情况下,“结果一致”,就是符合specification要求的,至于中间的,对执行顺序进行调整、优化,都是允许各种虚拟机实现自行决定的。这一点,也说明了specification中搞这么复杂的关键原因,就是为了“允许优化执行代码”。
在17.4.3. Programs and Program Order 的最后一句,说的非常明白:“If we were to use sequential consistency as our memory model, many of the compiler and processor optimizations that we have discussed would be illegal.”