缓存行
单个cell为一个long的包装,使用了@sun.misc.Contended注解,保证该long变量占用单独的一个缓存行
由于高速缓存的操作单元为一个缓存行,而缓存行上其他元素的invalid会导致当前元素一同invalid,从而降低并发度,单独一个缓存行可避免此问题
细节
有一个普通变量base可计数,CAS失败后使用cell数组
通过线程生成随机数,定位cell数组位置
定位到的cell数组位置不为null,则可以尝试CAS增加当前cell
初始化cell数组、填充新的cell元素、扩容cell数组三个操作互斥,会使用CAS乐观锁竞争cellbusy
竞争失败或者CAS失败可以尝试其他方式,比如说重新生成随机数再次定位,或者CAS操作base变量
多次失败则触发cell数组扩容操作,进一步提高并发度