采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
看了别人的解释,举的链表的例子,说线程2修改了链表的内容,但是表头没变,所以线程1还是能更新成功。对于AtomicInteger这个基本类型的包装类应该不存在这种问题吧,希望老师能帮我解疑,困惑很久了。
你好,这里正好有个例子可以回答你的问题。具体如下:某人账户里有10000元,提取了5000元,因为提款机问题,有两个线程,同时把余额从10000变为5000线程1(提款机):获取当前值10000,期望更新为5000,线程2(提款机):获取当前值10000,期望更新为5000,线程1成功执行了,线程2因为某种原因block了,这时汇款进来5000线程3(默认):获取当前值5000,期望更新为10000,这时候线程3成功执行,余额变为10000,线程2从Block中恢复,获取到的也是10000,对比之后,发现可以提交,更新余额为5000!!!此时,本来余额应该为10000(10000-5000+5000),但是实际上却变成了5000(10000-5000+5000-5000)这就是ABA问题带来的线程安全问题。
问题已解决
登录后可查看更多问答,登录/注册
构建完整并发与高并发知识体系,倍增高薪面试成功率!
1.7k 1
1.1k 18
1.2k 15
3.6k 12
1.3k 12