王小明3
2017-05-07 15:57
在之前讲到可见性时,说,值变更由工作空间->主内存->工作空间 一步不能缺。
但这节课说,B线程将number更新为6并同步主内存后,A线程的工作空间为何还是5?不是volatile保证了可见性了吗?
我的理解是,A工作的工作空间已经变成了6,但A线程之前已经读取过数据了,所以继续沿用之前的操作,是5.不知道我的理解是否正确。
你根本就不理解。。这个volitate,只对单个操作有效,对i++ 或者其他多步的操作,根本保证不了线程安全
区别就是当voliate对象要去操作工作空间的变量时,会先把工作空间的变量清空,去主存读一下,操作完之后,会先将操作后的数据写到主存里,这个过程是强制的
这个主内存->工作空间,是你读数据的时候,自己去主内存里读的,不是主内存的数据实时的更新到这个工作空间
不是你这么理解的,A工作空间的数据还是5,
细说Java多线程之内存可见性
55910 学习 · 74 问题
相似问题