冲突访问(Conflicting Accesses ) 对同一个共享字段或数组元素存在两个访问(读
或写),且至少有一个访问是写操作,就称作有冲突。
Happens-Before 关系 两个动作(action)可以被 happens-before 关系排序。如果一
个动作 happens-before 另一个动作,则第一个对第二个可见,且第一个排在第二个
之前。必须强调的是,两个动作之间存在 happens-before 关系并不意味着这些动作
在 Java 中必须以这种顺序发生。happens-before 关系主要用于强调两个有冲突的动
8 / 66
作之间的顺序,以及定义数据争用的发生时机。可以通过多种方式包含一个
happens-before 顺序,包括:
某个线程中的每个动作都 happens-before 该线程中该动作后面的动作。
某个管程上的 unlock 动作 happens-before 同一个管程上后续的 lock 动作。
对某个 volatile 字段的写操作 happens-before 每个后续对该 volatile 字段的读
操作。
在某个线程对象上调用 start() 方法 happens-before 该启动了的线程中的任意
动作。
某个线程中的所有动作 happens-before 任意其它线程成功从该线程对象上的
join()中返回。
如果某个动作 a happens-before 动作 b,且 b happens-before 动作 c,则有 a
happens-before c.