采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
老师课上说CAS 的缺点使ABA问题 问题一:使用Atomic包下的工具类我还需要考虑ABA问题吗 问题二:解决ABA问题老师说是用版本号控制,那么这个版本号的读写应该是使用独占锁吧,这样才能保证每一个写操作比较版本号的时候一定是最新的版本号
自问自答,总结下,老师看我说的对不对
联系上下总结的时候突然想通了,其实CAS就是老师课堂上说的,CAS其实就是从硬件上实现原子性,CPU的特殊指令,例如:CPU一个指令就可以实现“比较+替换”,过程中不会被打断,我只拿了一半,我觉得这才是是CAS,他就是特殊指令把原来需要多个指令组合成一个原子操作的指令,除此之外没有其他的功能,这就解释了老师课堂上为什么说CAS有ABA问题,CAS其实没有自带检查预期值或者什么结果值,这个应该是为了解决ABA问题才出现的解决方案,不然我理解不了如果有ABA问题atmoic包下的所有类,我们在用的时候还要考虑ABA问题,那么这也太坑了吧
还有自旋,个人认为也是不应该属于CAS范畴之内,它只是想要该线程一定要操作成功这个操作,因为线程在CAS的时后人为的会添加验证比如版本号或者检查预期值之类的,保证线程安全,所以可能是会失败的,所以要自旋,缺点应该是自旋的缺点,不应该是CAS的缺点
以上是我的个人总结,如果油不对之处,望老师指出^ ^
可以用带时间戳的atomic类
好吧,可能我理解错了ABA问题,刚刚搜索了下,ABA通俗的来讲就是两个线程同时对A进行修改,同时读到了预期值,一个线程把A修改成B又把B改回了A那么对于另外的线程是A确实没变化,那么就修改成功了,ABA的问题在于修改为B的过程对另一个线程是不可见的,我这样的理解对吗,所以也间接回答了我上一个问题,使用普通的atomic类是要考虑ABA问题,但是如果只数值的结果负责不考虑过程那么就不用考虑ABA问题了
理解是对的
登录后可查看更多问答,登录/注册
JUC全方位讲解,构建并发工具类知识体系
1.0k 11
1.4k 10
1.1k 10
1.0k 10
1.5k 9