
如何理解java中的happens-before规则?
happens-before规则是java并发编程中的一项重要概念,它定义了线程之间操作的顺序依赖性。
以这段代码为例:
class ReorderExample {
int a = 0;
boolean volatile flag = false;
public void writer() {
a = 1; //1
flag = true; //2
}
Public void reader() {
if (flag) { //3
int i = a * a; //4
System.out.println(i);
}
}
}根据happens-before规则:
立即学习“Java免费学习笔记(深入)”;
- 在一个线程中,前面的操作happens-before于后面的任意操作(规则1)
- 对一个volatile变量的写操作,happens-before于后续对这个变量的读操作(规则2)
因此,如果语句2(将flag设置为true)在语句3(检查flag)之前执行,则保证在多线程环境下读者线程也能看到a的值为1。
然而,在多线程情况下,如果没有使用同步机制,语句2和3的执行顺序是无法确定的。因此,即使writer()方法先于reader()方法执行,也可能出现语句3在语句2之前执行的情况,导致无法输出任何内容。









