美文网首页
22.Striped64与LongAdder

22.Striped64与LongAdder

作者: 段段小胖砸 | 来源:发表于2021-10-25 11:14 被阅读0次

    AtomicLong内部是一个volatile long型变量,由多个线程对这个变量进行CAS操作。多个线程同时对一个变量进行CAS操作,在高并发的场景下仍不够快。

    从JDK 8开始,针对Long型的原子操作,Java又提供了LongAdder、LongAccumulator;针对Double类型,Java提供了DoubleAdder、DoubleAccumulator。Striped64相关的类的继承层次如下图所示。


    image.png

    原理
    把一个变量拆成多份,变为多个变量,有些类似于 ConcurrentHashMap 的分段锁的例子。如下图所示,把一个Long型拆成一个base变量外加多个Cell,每个Cell包装了一个Long型变量。当多个线程并发累加的时候,如果并发度低,就直接加到base变量上;如果并发度高,冲突大,平摊到这些Cell上。在最后取值的时候,再把base和这些Cell求sum运算

    image.png

    相关文章

      网友评论

          本文标题:22.Striped64与LongAdder

          本文链接:https://www.haomeiwen.com/subject/jqbkaltx.html