ABA 问题描述:
- 假设有两个线程,线程 1 和线程 2,线程 1 工作时间需要 10 秒,线程 2 工作需要 2 秒;
- 主内存值为 A,第一轮线程 1 和线程 2 都把 A 拿到自己的工作内存;
- 第 2 秒,线程 2 开始执行,线程 2 工作完成把 A 改成了 B ;
- 第 4 秒,线程 2 把 B 又改成了 A,然后就线程 2 进入休眠状态;
- 第 10 秒,线程 1 工作完成,看到期望为 A 真实值也是 A 认为没有人动过,其实 A 已经经过了修改,只不过又改了回去,然后线程 1 进行 CAS 操作。
ABA 问题解决:为了解决这个问题,在每次进行操作的时候加上一个版本号或者是时间戳即可。