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

时间:2010-05-05 07:12:36

标签: java concurrency int atomic

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

int i = 0;
return ++i;

AtomicInteger ai = new AtomicInteger(0);
return ai.incrementAndGet();

2 个答案:

答案 0 :(得分:13)

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

答案 1 :(得分:6)

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

  1. 读取存储的值(原子)
  2. 添加一个(原子)
  3. 商店价值(原子)
  4. 确切地说,在

    之间会发生一些不好的事情

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

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

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