在像Android這樣的多線程環境中,一個簡單的int
變量可能會被多個線程操縱,在這種情況下,仍然有理由將int
用作數據成員嗎?是否有任何理由不總是使用AtomicInteger作爲數據成員?
作爲局部變量的一個int
,限於對其進行獨佔訪問的方法的範圍(並且因此開始修改它總是在同一個線程中),這在性能上是非常有意義的。
但是,作爲數據成員,即使包含訪問者,它也可能會遇到衆所周知的併發交錯修改問題。
所以它看起來像「玩它安全」,可以全面使用AtomicInteger
。但這似乎非常低效。
你能舉一個線程安全的int
數據成員用法的例子嗎?
對int的操作是不是原子的? (誠實的問題,這對我來說是一個新話題。) – djechlin
@djechlin即使是'++'也不是原子的。 – ef2011
'++'不是原子的,但讀取是寫入(賦值)。換句話說,你永遠不會得到交錯的字節。 '++'的問題是'i = i + 1'的簡寫,並且在讀和賦值之間可能會有一個突變。 – pamphlet