代码之家  ›  专栏  ›  技术社区  ›  Finbarr

Javaint并发++int相当于AtomicInteger。

  •  9
  • Finbarr  · 技术社区  · 14 年前

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

    int i = 0;
    return ++i;
    
    AtomicInteger ai = new AtomicInteger(0);
    return ai.incrementAndGet();
    
    2 回复  |  直到 14 年前
        1
  •  13
  •   gustafc    14 年前

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

        2
  •  6
  •   Mario Ortegón    14 年前

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

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

    所以肯定会有不好的事情发生

    在long的情况下,它甚至更复杂,因为即使是read操作本身也不是原子的。

    我找到一篇关于记忆模型的好文章

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