为了账号安全,请及时绑定邮箱和手机立即绑定

B线程工作空间何值的问题

在之前讲到可见性时,说,值变更由工作空间->主内存->工作空间 一步不能缺。

但这节课说,B线程将number更新为6并同步主内存后,A线程的工作空间为何还是5?不是volatile保证了可见性了吗?

我的理解是,A工作的工作空间已经变成了6,但A线程之前已经读取过数据了,所以继续沿用之前的操作,是5.不知道我的理解是否正确。

正在回答

4 回答

你根本就不理解。。这个volitate,只对单个操作有效,对i++ 或者其他多步的操作,根本保证不了线程安全

1 回复 有任何疑惑可以回复我~

区别就是当voliate对象要去操作工作空间的变量时,会先把工作空间的变量清空,去主存读一下,操作完之后,会先将操作后的数据写到主存里,这个过程是强制的

0 回复 有任何疑惑可以回复我~
#1

王小明3 提问者

这样的话,没有体现到可见性啊。B线程的改动对A不可见啊…
2017-05-14 回复 有任何疑惑可以回复我~
#2

_曲終散

同样有此疑问,并且看了你的解析,我想问问,既然线程1要操作变量,它不需要重新去主存读取一下吗?
2018-03-18 回复 有任何疑惑可以回复我~

这个主内存->工作空间,是你读数据的时候,自己去主内存里读的,不是主内存的数据实时的更新到这个工作空间

0 回复 有任何疑惑可以回复我~
#1

王小明3 提问者

这样的话,怎么保证可见性?voliate和普通的区别又在哪?
2017-05-10 回复 有任何疑惑可以回复我~

不是你这么理解的,A工作空间的数据还是5,

0 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

B线程工作空间何值的问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信