gpt4 book ai didi

java - 对 volatile 和 Atomic 类有一些疑问?

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:48:18 27 4
gpt4 key购买 nike

我正在阅读 Java 线程这本书。我遇到了这个声明

声明 1:-“volatile 变量只能安全地用于单个加载或存储操作,不能适用于长变量或双变量。这些限制使得 volatile 变量的使用不常见”

我不明白单次加载或存储操作在这里是什么意思?为什么 volatile 不能适用于长变量或双变量?

声明 2:-“可变整数不能与++ 运算符一起使用,因为++ 运算符包含多个指令。AtomicInteger 类有一个方法允许它持有的整数是原子递增。”

为什么 Volatile 整数不能与++ 运算符一起使用以及 AtomicInteger 如何解决它?

最佳答案

Statement 1:- "volatile variables can be safely used only for single load or store operation and can't be applied to long or double variales. These restrictions make the use of volatile variables uncommon"

什么?!我相信这完全是错误的。也许你的书已经过时了。

Statement 2:- "A Volatile integer can not be used with the ++ operator because ++ operator contains multiple instructions.The AtomicInteger class has a method that allows the integer it holds to be incremented atomically."

正如其所言。++ 运算符实际上转换为这样的机器代码(在类似 Java 的伪代码中):

sync_CPU_caches();
int processorRegister = variable;
processorRegister = processorRegister + 1;
variable = processorRegister;
sync_CPU_caches();

这不是线程安全的,因为即使它有一个内存屏障,并且以原子方式读取,并以原子方式写入,但不能保证你不会在中间进行线程切换,并且处理器寄存器是本地的一个 CPU 核心(将它们视为 CPU 核心内的“局部变量”)。但是 AtomicInteger 是线程安全的 - 它可能是使用特殊的机器代码指令实现的,例如比较和交换。

关于java - 对 volatile 和 Atomic 类有一些疑问?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20302683/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com