Java 中存在一个 happen before原则,这个原则指的是两个动作执行顺序会跟一些规则有关系。如果说 动作 x happen before 动作 y,那么 x 对于 y 来说是可见的,并且排在 y 之前。
如果 x 和 y 是同一个线程下的两个动作,那么 x 的代码在 y 之前的话,则说 x happen before y
happen before 原则一共有 8 条,按照特性我分为 1 1 1 2 3。这8条分别是顺序性 1 条、传递性 1 条、对象初始化 1 条、线程可见性 2 条、线程生命周期三条。
顺序性
单线程中,代码在前的 happen before 代码在后的。传递性
代码 A happen before 代码 B,代码 B happen before 代码 C,那么 代码 A happen before 代码 C。对象初始化
一个对象构造函数 constructor 中的 最后一行 对这个对象析构函数 finalizer 的第一行 happen before