2010-05-05 64 views

回答

13

沒有,++i實際上是三個指令(負載i,增量,店i)。這絕對不是原子的。

+0

這就是我的想法。讀取值,增加值,獲得價值。 – Finbarr 2010-05-05 07:17:48

+2

如果'i'被聲明爲volatile,它甚至不是原子。 – 2010-05-05 07:23:58

6

該++操作不是在Java原子,因爲它是由三個操作

  1. 的讀取存儲的值(原子)
  2. 將一個到它(原子)
  3. 存儲值(原子)

所以明確壞事可以

之間發生在的情況下,很長,它甚至更棘手,因爲即使讀操作本身也不是原子的。

我找到了一個很好的一篇文章,談到了內存模型

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