【发布时间】:2012-06-20 18:01:51
【问题描述】:
在像 Android 这样的多线程环境中,一个简单的 int 变量可能由多个线程操作,在某些情况下仍然可以使用 int 作为数据成员吗?
int 作为局部变量,仅限于对其具有独占访问权限的方法的范围(因此修改它的开始和结束总是在同一个线程中),在性能方面非常有意义。
但是作为数据成员,即使被访问器包裹,也会遇到众所周知的并发交错修改问题。
所以看起来“安全起见”,人们可以全盘使用AtomicInteger。但这似乎非常低效。
你能举一个线程安全的int数据成员使用的例子吗?
【问题讨论】:
-
int 上的哪些操作不是原子的? (诚实的问题,这对我来说是一个新话题。)
-
@djechlin 即使
++也不是原子的。 -
++不是原子的,但读取是写入(分配)。换句话说,你永远不会得到交错的字节。++的问题在于它是i = i + 1的简写,并且在读取和分配之间可能存在突变。
标签: java multithreading performance atomic