首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
AI 模拟面试
简历
求职
学习
基础学习课
实战项目课
求职辅导课
专栏&文章
竞赛
我要招人
发布职位
发布职位、邀约牛人
更多企业解决方案
AI面试、笔试、校招、雇品
HR免费试用AI面试
最新面试提效必备
登录
/
注册
追求谁谁谁
2017-04-23 16:21
北京邮电大学 Java
关注
已关注
取消关注
java volatile询问
如果两个线程同时写volatile变量会出现什么问题?一个面试官问我的,求大神解答
#Java工程师#
提示
全部评论
推荐
最新
楼层
sillyeye
西南石油大学 Java
volatile能保证原子性,保证的是对64位long double简单赋值操作和读操作的原子性。但是复杂操作例如自增不能保证。但是你不能说没有保证自增volatile就不具有原子性,因为自增也是由3个原子性操作相加的符合操作。类比的你可以去看collections类同步synchronizedMap过后的map,他的put get remove一样是原子性的,但是如果你调用两个原子性操作就会出错。比如containsKey之后进行remove,并发时会出错的。
点赞
回复
分享
发布于 2017-04-23 19:02
mafee
中国传媒大学 Java
内存可见性和禁止指令重排序
点赞
回复
分享
发布于 2017-04-24 07:38
拖仔
东北大学 C++
至少在cpp里,不能保证线程安全…只是禁止了编译器的优化工作…
点赞
回复
分享
发布于 2017-04-23 23:55
GoOrNotGo!
中山大学 Java
对于基本变量的赋值和读取能保证原子性,其他不行。既然问的是使用了volatile,那我们的前提就是使用正确的情况下,根据happen-before原则,是不会有问题的,不可能是同时
点赞
回复
分享
发布于 2017-04-23 23:28
风的方向zlw
西安电子科技大学 Java
个人看法:如果写操作是i++这类的操作是会出现并发问题的,因为自增操作会分解成三个操作完成,这个大家都知道;如果写操作是i = 1这类赋值操作就不会有问题,因为赋值操作在jvm层面也是原子操作,加上volatie实现的可见性,就可以保证多个线程对这个变量的修改一定会有个先后顺序,最后这个变量的值就是最后执行的线程修改的值。
点赞
回复
分享
发布于 2017-04-23 21:50
layman
汕头市业余大学
楼主可以看看一位大神海子的一篇博客 volitale讲的很详细
点赞
回复
分享
发布于 2017-04-23 20:46
就只面了腾讯一家公司
北京师范大学 Java
可能读到被修改之前的值。因为读到缓存的数据了。
点赞
回复
分享
发布于 2017-04-23 18:37
牛客2692795号
厦门大学
volatile 不能保证原子性!!!绝对不能。认为能的是对java理解很大的常见误区。 volatile 保证的是内存可见性。也可用来防止指令重排序(就是上面有人提到的内存屏障,也是happens-before的一条原则)
点赞
回复
分享
发布于 2017-04-23 18:23
牛客2329558号
南京大学 Java
volitile能保证读和写的原子性
点赞
回复
分享
发布于 2017-04-23 17:14
李香兰
北京理工大学
不可能同时写,当某个线程a往主存写的时候,会锁住cpu缓存行,导致另一个线程b的相同变量无法同时写入与读取,当a写完时,由happen-before规则,b线程会重新读取主存最新的值,也就是说,volatile是轻量级的synchronized,不会导致线程切换。
点赞
回复
分享
发布于 2017-04-23 16:38
小度小度
南京大学 Java
volatile不能保证线程安全
点赞
回复
分享
发布于 2017-04-23 16:27
广东周润发
阿里巴巴_智能信息_Android
内存屏障
点赞
回复
分享
发布于 2017-04-23 16:25
暂无评论,快来抢首评~
相关推荐
05-24 10:40
Every man has his faults.金无足赤,人无完人。
2025.05.24 在牛客打卡3297天!
点赞
评论
收藏
分享
05-28 05:19
int和Integer哪个会占用更多的内存?
在Java中,int和Integer都用于表示整数类型数据,但它们之间有一些重要的区别,包括内存占用。简要地说: 1.int是Java的原始数据类型(primitive type),它直接存储整数值。在32位系统中,一个int占用4个字节(32位),在64位系统中,一个int同样占用4个字节。 2.Integer是Java的包装类(wrapper class)之一,它提供了一种方式将int转换为对象。Integer对象包含一个int字段和相关的方法。在32位系统和64位系统上,一个Integer对象都会占用至少16个字节(128位),这包括对象的头部开销、int字段的存储和其他对象管理...
点赞
评论
收藏
分享
05-17 16:06
大连理工大学 后端
外卖加点评可以找到寒假实习吗
牛客在线求职答疑中心
点赞
评论
收藏
分享
05-21 20:57
蚌埠坦克学院 嵌入式软件开发
面试官喜欢什么样的面试者?内行才知道的几个关键点
无论你面试的是技术导向的创业公司,还是流程规范的大厂,面试官几乎不会在面试现场直接告诉你:你表现得好不好。但事实上,很多面试细节,已经透露出你是否能拿到 offer 的信号。从面试官的角度来看,一个优秀的面试者,不仅是能力匹配,更是沟通顺畅、态度积极、具有合作潜力的人选。下面从三个维度展开讲讲:面试官偏好的候选人风格、如何在面试中表现得更受欢迎、以及如何从细节判断面试结果。一、面试官偏好的面试者风格清晰、简洁的表达者面试官最怕的不是你不会,而是你讲不清楚。优秀的候选人能够用准确、结构化的语言解释自己的项目经历、解决问题的思路,以及为什么这么做。尤其在技术面中,清晰的思维链远比堆砌术语更有说服力...
面试经验谈
点赞
评论
收藏
分享
05-19 21:17
东南大学 Java
黑马点评提问
请问各位大佬,项目里提到了缓存热点数据,还有解决缓存雪崩和击穿的问题,面试的时候被问到项目里热点数据的过期时间一般是怎么设置的,该如何回答呢
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
招聘动态
查看更多
快手
快Star-X特别技术人才计划启动
现代汽车前瞻技术研发中心
京东TET
全站热榜
更多
1
...
腾讯csig暑期一二三面
7407
2
...
史上最细SQL实战系列:sql笔试例题总结篇(建议收藏)
6975
3
...
可是,我脱了长衫也没人要啊...
4359
4
...
腾讯云智后台开发暑期面经
4033
5
...
为什么你很难找到工作
3781
6
...
字节实习week6:听leader吐槽当前的应届生候选人们
3703
7
...
友友们如何看待这个问题
3299
8
...
简历很差吗?
2813
9
...
今天你举报室友ai作弊,明天可能被同事举报迟到
2688
10
...
《炸裂!黑马程序员居然拿我打广告》
2511
创作者周榜
更多
正在热议
更多
#
大家每天通勤多久?
#
45899次浏览
346人参与
#
银行笔面经互助
#
134281次浏览
1168人参与
#
现代汽车前瞻技术研发急速编程挑战赛
#
33582次浏览
259人参与
#
上班到公司第一件事做什么?
#
58613次浏览
500人参与
#
设计人如何选offer
#
119258次浏览
741人参与
#
CVTE求职进展汇总
#
16408次浏览
292人参与
#
上班苦还是上学苦呢?
#
229674次浏览
1357人参与
#
非技术投递记录
#
604498次浏览
6402人参与
#
90后北漂现状
#
24903次浏览
201人参与
#
百度工作体验
#
226999次浏览
1996人参与
#
机械人与华为的爱恨情仇
#
117877次浏览
951人参与
#
金融财会交流会
#
110579次浏览
380人参与
#
工作中,努力重要还是选择重要?
#
137228次浏览
1683人参与
#
发工资后,你做的第一件事是什么
#
68751次浏览
232人参与
#
机械人,你的秋招第一份简历被谁挂了
#
141721次浏览
1982人参与
#
Offer比较,你最看重什么?
#
186986次浏览
1288人参与
#
工作中哪个瞬间让你想离职
#
26458次浏览
179人参与
#
你觉得实习能学到东西吗
#
40942次浏览
780人参与
#
秋招什么时候开投比较合适?
#
29099次浏览
353人参与
#
联想求职进展汇总
#
271061次浏览
2053人参与
#
机械人集合!你是什么工程师?
#
16403次浏览
89人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务