首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
请你说一下volatile
[问答题]
请你说一下volatile
添加笔记
求解答(0)
邀请回答
收藏(17)
分享
纠错
2个回答
添加回答
0
HoraceDH
链接:
https://www.nowcoder.com/questionTerminal/10add92ec14c43808fb3ec96d1271197
来源:牛客网
1、volatile是一个Java的关键字,用来解决内存可见性问题的。
2、当多个线程操作共享变量时,会存在数据不一致的问题。因为在Java内存模型中,有工作内存和主内存,每个线程都有自己的工作内存,里边存储变量的副本,当对一个普通变量进行写操作时,不会立即同步到主内存,因此其他线程不能立即看到最新的值,这就是内存可见性问题。
3、通过volatile关键字修饰的变量可以解决这个问题,JVM底层是通过内存屏障来实现,当对一个变量进行读取时,插入读屏障,表示先从主内存读取,当对一个变量进行写入后,插入写屏障,表示立即同步到主内存,这样就解决了可见性问题,保证了数据一致性,对应于硬件层面,看到资料说是Intel提供了缓存一致性协议MESI,对共享变量写入时,发出通知让其他CPU核心缓存行失效,早期的CPU是通过对总线加锁的方式实现。
4、但volatile不能解决原子性问题,因为每个线程都有工作内存,各自线程计算完后同步到主内存会存在覆盖的问题。
5、volatile的使用场景一般用在于一个线程读,另一个线程写的情况下,例如标志位这类,同时读写一个volatile的场景不适合,因为会出现原子性问题。
发表于 2022-06-25 09:25:21
回复(0)
0
Showr
volatile用在多线程中修饰变量,使得该变量修改后立即可见,即可见性
同时禁止指令重排序,但是不保证原子性
发表于 2019-09-06 15:49:49
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
上传者:
小小
难度:
2条回答
17收藏
526浏览
热门推荐
相关试题
明明的随机数
数组
评论
(3705)
来自
华为研发工程师编程题
体育课测验(二)
广度优先搜索(BFS)
拓扑排序
dfs
评论
(2)
防火墙是怎么实现的?
计算机网络基础
评论
(1)
PMOS和NMOS的区别
元器件
评论
(1)
“乔布斯不做调查,张小龙不看数据。...
用户研究
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题