传递性。A先行发生B,B先行发生C,那么,A先行发生C。
volatile boolean configured = false; // Thread1 while (!configured) {} // 操作3 doSometing(); // 操作4 // Thread2 loadConfig(); // 操作1 configured = true; // 操作2在上面给的例子中,为configured添加volatile修饰,则根据先行发生规则有:
操作1先行发生于操作2(程序次序规则)
操作3先行发生于操作4(程序次序规则)
操作2先行发生于操作3(volatile变量规则)
操作1先行发生于操作4(传递性规则)
如此,即可确保程序按照预定逻辑正常执行。
本文也发布于掘金:https://juejin.cn/post/6998148242928042021/
参考《深入理解Java虚拟机》
关键字: volatile详解