这两者等价吗?换句话说,++和--运算符是否是原子操作?
int i = 0;
return ++i;
AtomicInteger ai = new AtomicInteger(0);
return ai.incrementAndGet();
int i = 0;
return ++i;
AtomicInteger ai = new AtomicInteger(0);
return ai.incrementAndGet();
不,++i
实际上包含三个指令(加载 i
,递增,存储到 i
)。它绝对不是原子操作。
http://www.vogella.de/articles/JavaConcurrency/article.html#memorymodel_atomic
i
被声明为volatile
,那么它甚至不是原子的。 - Stephen C