请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于happens-before原则的疑问

static volatile int i = 0;
 
public void write(int j ){
    i = j;
}
 
public int read(){
    return i;
}

如果线程一调用write(),线程二调用read(),volatile的happens-before原则能够保证在线程一先执行的情况下线程二能够得到修改后的i的值,如果线程二先执行volatile在这里就不起作用了,这样理解对吗?

正在回答 回答被采纳积分+3

1回答

悟空 2019-09-04 11:25:30

线程2先执行,那就是先读取,然后才写入。这时也不需要volatile,因为读取不改变原值,那么单次写入就是安全的。

由于线程1和2的顺序我们无法保证,在线程一先执行的情况下线程二能够得到修改后的i的值,这就是volatile的作用。

如果线程二先执行,那么此时volatile不起作用。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕无忌8241360 #1
    明白了,谢谢老师的回复
    回复 有任何疑惑可以回复我~ 2019-09-04 11:29:42
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信