如何理解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规则:
因此,如果语句2(将flag设置为true)在语句3(检查flag)之前执行,则保证在多线程环境下读者线程也能看到a的值为1。
然而,在多线程情况下,如果没有使用同步机制,语句2和3的执行顺序是无法确定的。因此,即使writer()方法先于reader()方法执行,也可能出现语句3在语句2之前执行的情况,导致无法输出任何内容。