什么是ABA问题?
1、什么是ABA问题?
ABA问题是CAS(Compare-and-Swap)操作中的一个经典问题,发生在多线程环境中:
-
-线程1读取内存位置V的值为A
-
线程2将值从A修改为B,然后又改回A
-
线程1执行CAS操作,发现值仍是A,于是操作成功
虽然值最终相同,但中间状态的变化可能影响程序逻辑一致性。
2、ABA代码问题解析
初始状态: 账户余额 = 100元
线程1启动: 读取账户余额为100元
线程2启动: 修改账户余额 100 → 50
线程2继续: 修改账户余额 50 → 100
线程1继续: 尝试从100转账到150...
线程1操作结果: 转账成功!当前余额 = 150元
❗ ABA问题发生: 账户经历了100→50→100的变化,但转账仍然成功!
问题分析
从演示中可以看到,虽然账户余额最终回到了100元,但线程1无法感知到中间发生了100→50→100的变化。在真实场景中,这可能导致未经授权的余额修改被掩盖,或者库存管理系统未能跟踪实际库存流动。
解决方案:使用AtomicStampedReference,通过添加版本戳来跟踪每次修改。