这两个等值吗?换句话说,++和 - 运算符是原子的吗?Java int concurrency ++ int相当于AtomicInteger.incrementAndGet()?
int i = 0;
return ++i;
AtomicInteger ai = new AtomicInteger(0);
return ai.incrementAndGet();
这两个等值吗?换句话说,++和 - 运算符是原子的吗?Java int concurrency ++ int相当于AtomicInteger.incrementAndGet()?
int i = 0;
return ++i;
AtomicInteger ai = new AtomicInteger(0);
return ai.incrementAndGet();
没有,++i
实际上是三个指令(负载i
,增量,店i
)。这绝对不是原子的。
该++操作不是在Java原子,因为它是由三个操作
所以明确坏事可以
之间发生在的情况下,很长,它甚至更棘手,因为即使读操作本身也不是原子的。
我找到了一个很好的一篇文章,谈到了内存模型
http://www.vogella.de/articles/JavaConcurrency/article.html#memorymodel_atomic
这就是我的想法。读取值,增加值,获得价值。 – Finbarr 2010-05-05 07:17:48
如果'i'被声明为volatile,它甚至不是原子。 – 2010-05-05 07:23:58