采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
static volatile int i = 0; public void write(int j ){ i = j; } public int read(){ return i; }
如果线程一调用write(),线程二调用read(),volatile的happens-before原则能够保证在线程一先执行的情况下线程二能够得到修改后的i的值,如果线程二先执行volatile在这里就不起作用了,这样理解对吗?
线程2先执行,那就是先读取,然后才写入。这时也不需要volatile,因为读取不改变原值,那么单次写入就是安全的。
由于线程1和2的顺序我们无法保证,在线程一先执行的情况下线程二能够得到修改后的i的值,这就是volatile的作用。
如果线程二先执行,那么此时volatile不起作用。
明白了,谢谢老师的回复
登录后可查看更多问答,登录/注册
完整的并发知识网络+丰富的工作内容分享+50余道并发高频面试题
1.9k 26
917 12
1.1k 12
2.5k 12
1.1k 11