首先说下他的作用
保证原子性的并发计数器,相较于基于cas的AtomicLong该实现性能更高;
它内部实现了一个竞争单元列表cells
原理是它在并发压力较大的时候会根据线程probe(一个变量,用来取模的)去路由到cells的某个单元上去竞争计数;
如果假设为收费站的话,AtomicLong就是单个窗口在工作;LongAdder就是一个主窗口和n个子窗口在工作;当线程发现主窗口有阻塞的时候会转而去尝试在各个子窗口去竞争;而且每个窗口又各自都是基于cas的原子操作;通过这样的方式减少了线程等待时间;
longadder原理图:
如果atomiclong是单车道的话,那么longadder就是多车道