CAS的缺点及其解决方案
1. ABA问题
同数据乐观锁的方式给它加一个版本号或者时间戳,如AtomicStampedReference。
2. 自旋消耗资源
破坏掉for死循环,当超过一定时间或者一定次数时,return退出。JDK8新增的LongAddr和ConcurrentHashMap类似的方法。当多个线程竞争时,将粒度变小,将一个变量拆分为多个变量,达到多个线程访问多个资源的效果,最后再调用sum把它合起来。
3. 多变量共享一致性问题
CAS操作是针对一个变量的,如果对多个变量操作,可以加锁或封装成对象类解决。
参考资料:CAS的缺点