Java int concurrency ++ int相当于AtomicInteger.incrementAndGet()?

Fin*_*arr 9 java int concurrency atomic

这两个是等价的吗?换句话说,++和 - 运算符是原子的吗?

int i = 0;
return ++i;

AtomicInteger ai = new AtomicInteger(0);
return ai.incrementAndGet();
Run Code Online (Sandbox Code Playgroud)

gus*_*afc 13

不,++i实际上是三条指令(加载i,增量,存储i).它绝对不是原子的.

  • 如果`i`被声明为`volatile`,它甚至不是原子的. (2认同)

Mar*_*gón 6

++操作在java中不是原子操作,因为它由三个操作组成

  1. 读取存储的值(原子)
  2. 添加一个(原子)
  3. 商店价值(原子)

所以最终可能发生一些不好的事情

在长的情况下,它甚至更棘手,因为即使读操作本身也不是原子的.

我发现了一篇很好的文章,讨论了内存模型

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