前言
上一篇我们介绍了在并发编程里面导致bug的三种问题,可见性问题,原子性问题,有序性问题。针对这三个问题,Java语言提供了Java内存模型(JMM)来解决这三种问题,主要是针对有序性和可见性问题。其本质上就是按需禁用缓存和编译优化。接下来我们就详细的阐述下。
Java内存模型介绍
Java 内存模型是一个很复杂的规范,本质上可以理解为:Java内存模型规范了JVM如何提供按需禁用缓存和编译优化(本质上是指令重排序)的方法。具体来说,这些方法包括:通过volatile,synchronized,final 还有Happen-Before规则来控制。下面我就详细介绍下。
Happen-Before 的本质上表示的意思是,先行发生,本质上表示的意思是 前面的操作产生的结果对后续操作可见。例如:A先行发生于B,那么执行B操作时,A操作产生的数据B操作一定能看到。
程序次序规则
程序次序规则:程序前面对某个变量的修改对后续操作一定是可见的
例如:
public void writer() {
a = 43;
b = a;
} 更多文章请关注《万象专栏》
转载请注明出处:https://www.wanxiangsucai.com/read/cv72594