在 Concurrency in Practice 中,它说如果
Writes to the variable do not depend on its current value.
因此,如果您有一个共享的可变变量 a
,并且所有线程对它执行的操作都是 a++
(它们不获取值,它们只是++
)。
然后根据引用,即使 a++
不是原子的,您也应该能够使其成为 volatile
,对吗?
最佳答案
不,在 volatile
变量上使用 ++
不是线程安全的,因为
a++
相当于:
int temp = a;
temp = temp + 1;
a = temp;
所以回写到 a
可能发生在 另一个线程修改了 a
因为你的线程读取了它,所以 a++
,即使 a
是易变的,也不是线程安全的。
您可以使用 AtomicInteger
,它实现了线程安全的原子增量。
关于java - 并发实践 - volatile++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13220664/