【问题标题】:Java int concurrency ++int equivalent to AtomicInteger.incrementAndGet()?Java int并发++int等价于AtomicInteger.incrementAndGet()?
【发布时间】:2011-02-15 19:19:59
【问题描述】:

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

int i = 0;
return ++i;

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

【问题讨论】:

    标签: java concurrency int atomic


    【解决方案1】:

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

    【讨论】:

    • 我就是这么想的。读取值,递增值,获取值。
    • 如果i被声明为volatile,它甚至不是原子的。
    【解决方案2】:

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

    1. 读取存储的值(原子)
    2. 向其添加一个(原子)
    3. 存储值(原子)

    所以在这两者之间肯定会发生一些不好的事情

    在long的情况下,就更棘手了,因为连读操作本身都不是原子的。

    我发现了一篇关于内存模型的好文章

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-07
      • 1970-01-01
      • 2012-04-02
      • 2010-09-24
      相关资源
      最近更新 更多