首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
int I = 0; I = i ; I = i ;是线
[问答题]
int i = 0; i = i++; i = i++;
是线程安全的吗?如果不是,那它在JVM中是如何实现的?JDK中有哪个类可以实现这个目标又是线程安全的?这个类线程安全的原理是什么?
查看答案及解析
添加笔记
邀请回答
收藏(37)
分享
纠错
4个回答
添加回答
1
推荐
C.C.
AtomicInteger,一个提供原子操作的Integer的类。在Java语言中,++i和i++操作并不是线程安全的,在使用的时候,不可避免的会用到synchronized关键字。而AtomicInteger则通过一种线程安全的加减操作接口。
编辑于 2015-02-04 19:48:12
回复(0)
0
若云散
是线程安全的,通过 “i
= i++;” 断定这段代码是在方法体中,那么i就是一个局部变量,
线程之间根本就不共享,自然不存在线程安全问题
编辑于 2017-07-28 16:36:09
回复(0)
0
Allen6314
(1) 不是线程安全的。
(2) 实现方式:当我们进行i++工作的时候,分成了几步。1. 通过read指令读取主内存中值,传输到工作内存中。2. 通过load指令把通过read指令传输到工作内存中的值放入到工作内存的变量副本中。3.通过use指令把工作内存中变量副本的值传递给执行引擎。4. 执行 i+1 操作。5. 通过assign指令把 运算后的值传给 赋给工作内存中的变量。6. 通过store指令把工作内存中的变量的值传输给主内存中。7. 通过write指令把通过store传输过来的值写入到主内存的变量中。
(3)AtomicInteger类可以实现这个目标并且是线程安全的。
(4)安全原理:利用了硬件的支持。(不太记得了。)其实主要能把上面的实现流程变成一个原子操作即可。比如说,执行完 i+1 后,马上store(这也是volatile原理)。或者通过synchronized,或者加锁lock来实现。
发表于 2015-07-01 01:06:55
回复(1)
0
过好每一天_20868
AutomaticInteger
发表于 2015-06-04 23:20:36
回复(1)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
Java
人人网
上传者:
***smile
难度:
4条回答
37收藏
6332浏览
热门推荐
相关试题
实现 input 输入框的自动匹配。
人人网
2011
Javascript
前端工程师
评论
(11)
来自
人人网2011前端工程师笔试卷
用代码实现在页面的固定区域内实现图...
人人网
2011
Javascript
前端工程师
评论
(17)
来自
人人网2011前端工程师笔试卷
用 js、html、css实现一...
人人网
2011
Javascript
前端工程师
评论
(5)
来自
人人网2011前端工程师笔试卷
分页系统的逻辑地址结构是一维的,分...
操作系统
评论
(1)
你说在销售运营这个岗位上会涉及到一...
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题