关于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不起作用。

0
1
慕无忌8241360
明白了,谢谢老师的回复
2019-09-04
共1条回复

线程八大核心+Java并发原理及企业级并发解决方案

完整的并发知识网络+丰富的工作内容分享+50余道并发高频面试题

2512 学习 · 939 问题

查看课程