CAS:compare and swap
比较交换:对值做了版本控制,相同的值才修改
但是会有ABA问题;
例如:
A线程去修改 变量 a = 1 改为 2;结果B 线程先把a ++ 接着又 a - - ,导致A以为没有改动将a改为2了,这里单值是没有大问题的,但是如果是引用就有大问题了
这里可以再加一个版本控制参数就可以了,类似于有两段版本控制(版本只能加),这样的话可以了
Java8是如何优化 CAS 的?
在大量线程做CAS的时候,线程竞争很激烈,这样的话,很多线程会加失败,然后再次处理,性能不好,例如有100个线程的时候,就建立一个cell[]数组,每10个线程一组对一个cell[]数组中的一个元素做自增操作,然后再汇总10个元素的结果,从而优化性能.