理解Java中的happens-before规则?-灵析社区

无敌英俊大师兄

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); } } } 这段代码如果2在3之前发生,那根据happens-before规则,确实会输出1。但是,就算先执行writer()方法,再执行reader()方法,在多线程情况下,也可能3比2先执行,就不会输出东西。请问我理解得对吗? 无

阅读量:156

点赞量:0

问AI
没什么问题呀,happens-before规则的这三条可以得出如果2在3之前发生,输出1这个结论。 1."在一个线程中,按照代码的顺序,前面的操作Happens-Before于后面的任意操作" 2."对一个volatile变量的写操作,Happens-Before于后续对这个变量的读操作 " 3."如果A Happens-Before B,并且B Happens-Before C,则A Happens-Before C " 多线程情况下你没有使用锁或者synchronized来实现线程同步的话,2和3的执行顺序就是没有办法确定的