前面介绍了Java内存模型及内存屏障相关概念,这篇文章接着介绍多线程编程另外一个比较重要的概念:先行发生原则(happens-before)。
重要性
happens-before是判断数据是否存在竞争,线程是否安全的主要依据,通过这个原则,我们可以解决并发环境下两个操作之间是否可能存在冲突的所有问题。
happens-before是什么
它Java内存模型中针对两项操作定义的偏序关系。例如操作A先行于操作B发生,那么操作B可以观察到操作A所产生的所有影响,这些影响包括修改内存中共享变量的值、发送的消息,调用的方法等。