我正在阅读Java Concurrency in Practice,在“16.1.3 The Java Memory Model in 500 words or less”中,它说:
Java 内存模型是根据操作指定的,包括对变量的读取和写入、监视器的锁定和解锁以及启动和加入线程。JMM为程序中的所有操作定义了一个称为发生前发生的偏序。为了保证执行动作B的线程可以看到动作A的结果(无论A和B是否发生在不同的线程中),A和B之间必须存在happens-before关系。在没有happens-before排序的情况下在两个操作之间,JVM 可以随意重新排序它们。
即使动作只是部分有序的,同步动作——锁的获取和释放,以及 volatile 变量的读取和写入——都是完全有序的。这使得用“后续”锁定获取和 volatile 变量读取来描述发生之前是明智的。
关于“部分排序”,我已经找到了 this和this,但我不太明白“即使动作只是部分排序,同步操作——锁的获取和释放,以及 volatile 变量的读取和写入——都是完全有序的。” . “同步动作完全有序”是什么意思?