* 由于CPU抢占问题,转账程序阻塞100ms
* 银行转账1元,成功。余额:11
* 银行卡原来余额为10,接收转账1元,故期望余额为11元。实际余额:11
*/
}
}
上述的两个例子,也许不是最适合的,但确实阐述了我想要表达的想法。
话说回来,只有到自己写demo时,才能理解大佬写ABA的demo时内心的挣扎啊。囧
ABA问题的解决
ABA问题的解决,说白了就是通过引入版本号,从而解决ABA问题的造成的隐患。
用我的话说呢,就是通过引入版本号,了解到线程执行操作时,是否有别的线程做了类似ABA的事情,从而使得本线程的CAS操作重新执行。这里为什么重新执行,因为简单啊。当然,也可以如我那样打个输出或者注释什么的(可能会浪费系统资源)。不管怎么处理,起码这次我知道有这么个问题了。囧。
小结
至此,CAS机制,ABA问题及解决方案,都已经叙述完毕了。
核心总结:
ABA问题的本质就是由于对多线程下CAS流程控制的缺乏,而导致的信息缺失。表现出来的就是由于缺乏必要信息,而产生了隐患
该说的差不多都说了,简单回顾一下:
- 凡事都有其利弊,往往弊端就是由于其优点带来的。如CAS的硬件支持。
- 技术的学习,需要追寻技术特性的真正来源,才可以一步步走向架构师。
- 学习,一方面需要寻求多方资料,另一方面也需要自己的理解与验证。
- 遇到无法理解或者无法解读的事物时,就去寻找它的定义,它的原则。