引言
Java内存模型是个很复杂的规范,可以从不同的角度解读,站在程序员的角度看,Java内存模型规范了JVM如何提供按需禁用缓存和编译优化的方法,这些方法包括volatile、synchronized和final三个关键字,以及六项Happens-Before规则,本次主要讲Happens-Before规则。
Happens-Before规则
Happens-Before意思是前面一个操作的结果对后续操作是可见的。
1.程序的顺序性规则
这条规则是指,按照程序的顺序,前面的操作结果对于后续操作是可见的,比如下面这段代码,"x=77;"是Happens-Before于"v=true;"的。
class Text {
int x = 0;
volatile boolean v = false;
public void writer() {
x = 77;
v = true;
}
public void read(){
if(v==true){
//x=?
}
}
}
2.volatile变量原则
这条规则是指对于一个volatile变量的写操作,是Happens-Before于后续的对该volatile变量的读操作。这条规则联合下条规则一起讲述。
3.传递性