首页
题库
公司真题
专项练习
面试题库
在线编程
面试
面试经验
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-07 22:26
百度or快手
投票
快手主站技术部
无
n1
大专
点赞
评论
收藏
分享
05-14 10:10
已编辑
哈尔滨工业大学
计算机网络:面试官喜欢问什么
为提升分析效果,已过滤掉“区别”、“原理”等过于宽泛或无法直接体现考点的关键词,保留了具有一定语义信息的词汇。虽然统计过程结合了代码自动化与人工干预,但由于数据源多样性和自然语言表达的复杂性,结果可能仍看起来不是特别的精确。但总体来看,它仍然能够帮助我们自上而下地把握计算机网络类面试题的核心考察方向与知识重点。🔍 一、高频关键词解析📌 1. TCP(Transmission Control Protocol)占比:19.24%(排名第一)。如果加上对应的TCP握手和挥手相关的内容,占比会更高。TCP在面试中这么重要,你想到了吗?说明:TCP 是网络通信中最核心的协议之一,强调可靠传输、连接...
30万真题,揭秘面试官最...
点赞
评论
收藏
分享
05-17 16:06
大连理工大学 后端
外卖加点评可以找到寒假实习吗
牛客在线求职答疑中心
点赞
评论
收藏
分享
评论
点赞成功,聊一聊 >
点赞
收藏
分享
评论
提到的真题
返回内容
招聘动态
查看更多
现代汽车前瞻技术研发中心
京东TET
全站热榜
更多
1
...
怎样才叫幸福
6953
2
...
七牛云海笔
6609
3
...
这样的实习,我还有必要坚持下去吗?
5448
4
...
去哪儿旅行又打复活赛了
5425
5
...
深圳挣钱深圳花,一分别想带回家
3734
6
...
制造业提前批合集(个人版,大伙速投哇
3596
7
...
依旧认为前端是版本答案
3575
8
...
26届秋招在即,分享我的Offer经验
3509
9
...
突然不想去实习了
3450
10
...
字节日常实习拿下offer
3364
创作者周榜
更多
正在热议
更多
#
你觉得现在还能进互联网吗?
#
2378次浏览
68人参与
#
如何准备秋招
#
5319次浏览
83人参与
#
现代汽车前瞻技术研发急速编程挑战赛
#
19100次浏览
172人参与
#
实习,不懂就问
#
17288次浏览
238人参与
#
如果中了500万,你会离职吗?
#
86545次浏览
677人参与
#
你觉得实习能学到东西吗
#
7800次浏览
176人参与
#
哪个瞬间让你对大厂祛魅了?
#
379644次浏览
2777人参与
#
面试时被问的最奇葩的问题
#
21589次浏览
124人参与
#
秋招什么时候开投比较合适?
#
3279次浏览
60人参与
#
软开人,秋招你打算投哪些公司呢
#
99575次浏览
934人参与
#
来聊聊你认为的薪资天花板是哪家?
#
30364次浏览
174人参与
#
每个月的工资都是怎么分配的?
#
7613次浏览
138人参与
#
预测一下26届秋招形势
#
12548次浏览
133人参与
#
腾讯工作体验
#
473734次浏览
3490人参与
#
打工人的精神状态
#
51947次浏览
943人参与
#
职场情商大赛
#
131239次浏览
655人参与
#
高考出分的那一天,我__
#
10170次浏览
144人参与
#
非技术2024笔面经
#
384661次浏览
4732人参与
#
一觉醒来,秋招难度下降一万倍……
#
83560次浏览
642人参与
#
京东美团大战,你怎么看?
#
92605次浏览
569人参与
#
安利/避雷我的专业
#
75497次浏览
522人参与
牛客网
牛客网在线编程
牛客网题解
牛客企业服务