后续每次读取同一字段之前,都会对易失字段进行写操作。
这里的重要词是“后续”。
这是Java语言规范17.4.4同步顺序的相关部分:
每个执行都有一个同步顺序。同步顺序是执行中所有同步动作的总顺序。对于每个线程t,t中的同步动作(第17.4.2节)的同步顺序与t的程序顺序(第17.4.3节)一致。同步动作在动作上引发了同步关系,定义如下:
- […]
- 对volatile变量(第8.3.1.4节)的写操作将与任何线程对v的所有后续读取进行同步(其中,后续操作是根据同步顺序定义的)。
注意最后一部分。因此,这就是说,如果您考虑程序动作的任何总排序,那么对volatile变量的任何读取(在该总排序中都比写入晚)将无法“忽略”该写入。



