关于happens-before原则的疑问
来源:13-5 volatile作用

慕无忌8241360
2019-09-04
static volatile int i = 0;
public void write(int j ){
i = j;
}
public int read(){
return i;
}
如果线程一调用write(),线程二调用read(),volatile的happens-before原则能够保证在线程一先执行的情况下线程二能够得到修改后的i的值,如果线程二先执行volatile在这里就不起作用了,这样理解对吗?
写回答
1回答
-
悟空
2019-09-04
线程2先执行,那就是先读取,然后才写入。这时也不需要volatile,因为读取不改变原值,那么单次写入就是安全的。
由于线程1和2的顺序我们无法保证,在线程一先执行的情况下线程二能够得到修改后的i的值,这就是volatile的作用。
如果线程二先执行,那么此时volatile不起作用。
012019-09-04
相似问题