这两个相同吗?换句话说,++和 - 运算符是原子的吗?
int i = 0;
return ++i;
AtomicInteger ai = new AtomicInteger(0);
return ai.incrementAndGet();
答案 0 :(得分:13)
不,++i
实际上是三条指令(加载i
,增量,存储在i
)。它绝对不是原子的。
答案 1 :(得分:6)
++操作在java中不是原子操作,因为它由三个操作组成
确切地说,在
之间会发生一些不好的事情在长的情况下,它甚至更棘手,因为即使读操作本身也不是原子的。
我发现了一篇很好的文章,讨论了内存模型
http://www.vogella.de/articles/JavaConcurrency/article.html#memorymodel_atomic