Java中的int类型并发++int等同于AtomicInteger.incrementAndGet()吗?

9
这两者等价吗?换句话说,++和--运算符是否是原子操作?
int i = 0;
return ++i;

AtomicInteger ai = new AtomicInteger(0);
return ai.incrementAndGet();
2个回答

13

不,++i 实际上包含三个指令(加载 i,递增,存储到 i)。它绝对不是原子操作。


这正是我所想的。读取值,增加值,获取值。 - Finbarr
2
如果i被声明为volatile,那么它甚至不是原子的。 - Stephen C

6
Java中的++操作不是原子操作,因为它由三个操作组成:
  1. 读取存储的值(原子操作)
  2. 将其加一(原子操作)
  3. 存储值(原子操作)
所以在这三个操作之间肯定会发生某些问题。
在long类型的情况下,情况更加棘手,因为即使是读取操作本身也不是原子操作。
我找到了一篇很好的文章,讲述了Java的内存模型。

http://www.vogella.de/articles/JavaConcurrency/article.html#memorymodel_atomic


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接