volatile关键字修饰对象的可见性问题,求大佬解惑

总所周知,volatile可以保证可见性而不保证原子性,我一直以为如果用volatile修饰一个对象的话其实是保证这个对象的引用的可见性,而不是保证这个对象的内容的可见性。
可是面试的时候面试官说的意思竟然是用volatile修饰一个map类型的对象时,可以保证其中元素的可见性,还说我对volatile的理解是错的,说这个和指令重排序有关???
我就是想问问volatile的可见性具体是怎么理解的?希望能有大佬解惑,万分感谢
全部评论
在网上找到的并发编程实战书的图片既然是相当于进入退出同步代码块,那么所有集合内元素也是可见的了
点赞 回复 分享
发布于 2019-10-12 15:03
不对,好像是两个问题,如果说对象已经被放入map中,那么对象的修改不需要访问map,这个时候应该是不可见的吧,除非是说你通过put等当时访问了map才会跟happem before有关?
1 回复 分享
发布于 2019-10-12 14:59
插眼,也有点迷糊,记得volatile的语意有被增强,比方说你在一个线程里面构造一个object并调用put放置,那么是不是根据happens before原则,另一个线程可以看到这个对象的数据?
1 回复 分享
发布于 2019-10-12 14:57
我觉得更改变量的值相当于就是修改内存地址上的值。这就是处于缓存一致性的范围内吧。对于map应该是一样的吧。
点赞 回复 分享
发布于 2019-10-12 15:00
点赞 回复 分享
发布于 2019-10-12 14:58
个人认为你的观点是正确的,指令重排序应该也是针对引用而言的,而不是针对内部元素的吧
点赞 回复 分享
发布于 2019-10-12 14:56

相关推荐

牛客928043833号:在他心里你已经是他的员工了
点赞 评论 收藏
分享
评论
点赞
4
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务