声明1:-“易失性变量只能安全地用于单次装载或存储操作,不能应用于长期或双重变量。这些限制使得易失性变量的使用不常见”
什么?!我认为这完全是错误的。也许您的书已经过时了。
声明2:-“易失性整数不能与运算符一起使用,因为运算符包含多条指令。AtomicInteger类具有一种方法,该方法允许以原子方式递增所保存的整数。”
确切地说。++运算符实际上会转换为这样的机器代码(类似于Java的伪代码):
sync_CPU_caches();int processorRegister = variable;processorRegister = processorRegister + 1;variable = processorRegister;sync_CPU_caches();
这不是线程安全的,因为即使它具有内存屏障,并且可以原子地读取和原子地写入,也不能保证您不会在中间获得线程切换,并且处理器寄存器是CPU内核本地的(将其视为CPU内核内部的“局部变量”)。但是an
AtomicInteger是线程安全的-它可能是使用特殊的机器代码指令(例如比较和交换)实现的。



