java - 并发实践 - volatile++

标签 java concurrency

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/

相关文章:

java - 遍历AST节点

java - BindResult hasErrors方法未显示

multithreading - future 是否在单个线程上执行? (斯卡拉)

java - 如何正确生成唯一的 id 并将其存储在 ConcurrentHashMap 中

java - 使用 IntelliJ 远程调试 Tomcat 7

java - 复制多维数组的部分内容

Java语法困惑,调用变量方法?

ruby-on-rails - 设置 Sidekiq :concurrency on Heroku

performance - SQLite 是否适合用作 Web 服务器上的只读缓存?

java - 如何处理可能创建新工作项的多个工作线程