【发布时间】:2011-02-15 19:19:59
【问题描述】:
这两个是等价的吗?换句话说,++ 和 -- 运算符是原子的吗?
int i = 0;
return ++i;
AtomicInteger ai = new AtomicInteger(0);
return ai.incrementAndGet();
【问题讨论】:
标签: java concurrency int atomic
这两个是等价的吗?换句话说,++ 和 -- 运算符是原子的吗?
int i = 0;
return ++i;
AtomicInteger ai = new AtomicInteger(0);
return ai.incrementAndGet();
【问题讨论】:
标签: java concurrency int atomic
不,++i 实际上是三个指令(加载i,递增,存储在i)。它绝对不是原子的。
【讨论】:
i被声明为volatile,它甚至不是原子的。
++操作在java中不是原子的,因为它是由三个操作组成的
所以在这两者之间肯定会发生一些不好的事情
在long的情况下,就更棘手了,因为连读操作本身都不是原子的。
我发现了一篇关于内存模型的好文章
http://www.vogella.de/articles/JavaConcurrency/article.html#memorymodel_atomic
【讨论】: