1. private static LongAdder longAdder1 = new LongAdder();
    2. private static LongAdder longAdder2 = new LongAdder();
    3. private static LongAdder data = longAdder1;//默认longAdder1
    4. private static boolean flag = true;//开关
    5. public void add() {
    6. data.increment();
    7. }
    8. public long getSum() {
    9. long sum = 0;
    10. if (flag) {
    11. data = longAdder2;
    12. sum = longAdder1.sum();
    13. flag = false;
    14. } else {
    15. data = longAdder1;
    16. sum = longAdder2.sum();
    17. flag = true;
    18. }
    19. return sum;
    20. }

    流程图:
    image.png

    这个方法其实就是类似于一个开关按钮,一开始默认在longAdder1进行添加,当我要获取值的时候,就按下开关让它在另外一边longAdder2进行添加,所以就能保证在longAdd1上获取的是正确值也不会影响添加,代码逻辑也比较简单,缺点是空间开销更大。暂时只能想到这个办法解决问题,有时间再想想还能不能优化吧。

    原文链接:https://blog.csdn.net/weixin_45909775/article/details/121729242