Java int 并发 ++int 相当于 AtomicInteger.incrementAndGet()?
这两个相等吗?换句话说,++ 和 -- 运算符是原子的吗?
int i = 0;
return ++i;
AtomicInteger ai = new AtomicInteger(0);
return ai.incrementAndGet();
Are these two equivalent? In other words, are the ++ and -- operators atomic?
int i = 0;
return ++i;
AtomicInteger ai = new AtomicInteger(0);
return ai.incrementAndGet();
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
不,++i实际上是三个指令(加载
i
、增量、存储在i
中)。它绝对不是原子的。No,
++i
is actually three instructions (loadi
, increment, store ini
). It's most definitely not atomic.++ 操作在 java 中不是原子的,因为它由三个操作组成
中间可能会发生一些不好的事情,
因此,在 long 的情况下, 它甚至更棘手,因为即使读取操作本身也不是原子的。
我发现了一篇关于内存模型的好文章
http://www.vogella。 de/articles/JavaConcurrency/article.html#memorymodel_atomic
The ++ operation are not atomic in java, because it is composed of three operations
So definitively something bad can happen in between
In the case of long, it is even trickier because even the read operation itself is not atomic.
I found a nice article that talks about the memory model
http://www.vogella.de/articles/JavaConcurrency/article.html#memorymodel_atomic