在像Android这样的多线程环境中,一个简单的int
变量可能会被多个线程操纵,在这种情况下,仍然有理由将int
用作数据成员吗?是否有任何理由不总是使用AtomicInteger作为数据成员?
作为局部变量的一个int
,限于对其进行独占访问的方法的范围(并且因此开始修改它总是在同一个线程中),这在性能上是非常有意义的。
但是,作为数据成员,即使包含访问者,它也可能会遇到众所周知的并发交错修改问题。
所以它看起来像“玩它安全”,可以全面使用AtomicInteger
。但这似乎非常低效。
你能举一个线程安全的int
数据成员用法的例子吗?
对int的操作是不是原子的? (诚实的问题,这对我来说是一个新话题。) – djechlin
@djechlin即使是'++'也不是原子的。 – ef2011
'++'不是原子的,但读取是写入(赋值)。换句话说,你永远不会得到交错的字节。 '++'的问题是'i = i + 1'的简写,并且在读和赋值之间可能会有一个突变。 – pamphlet