美文网首页
longAdder.increment()比 atomicLon

longAdder.increment()比 atomicLon

作者: Raral | 来源:发表于2021-10-30 18:23 被阅读0次

为什么需要AtomicInteger原子操作类?

对于Java中的运算操作,例如自增或自减,若没有进行额外的同步操作,在多线程环境下就是线程不安全的。num++解析为num=num+1,明显,这个操作不具备原子性,多线程并发共享这个变量时必然会出现问题。测试代码如下:


/**
 * @description: 压测AtomicLong的原子操作性能
 */
public class AtomicLongTest implements Runnable {


    private static AtomicLong atomicLong = new AtomicLong(0);

    @Override
    public void run() {
        for (int i = 0; i < 10000; i++) {
            atomicLong.incrementAndGet();
        }
    }

    public static void main(String[] args) {
        ExecutorService es = Executors.newFixedThreadPool(30);
        long start = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++) {
            es.submit(new AtomicLongTest());
        }
        es.shutdown();
        //保证任务全部执行完
        while (!es.isTerminated()) { }
        long end = System.currentTimeMillis();
        System.out.println("AtomicLong add 耗时=" + (end - start));
        System.out.println("AtomicLong add result=" + atomicLong.get());
    }
}

/**
 * @description: 压测LongAdder的原子操作性能
 */
public class LongAdderTest implements Runnable{
    private static LongAdder longAdder = new LongAdder();

    @Override
    public void run() {
        for (int i = 0; i < 10000; i++) {
            longAdder.increment();
        }
    }

    public static void main(String[] args) {
        ExecutorService es = Executors.newFixedThreadPool(30);
        long start = System.currentTimeMillis();
        for (int i = 0; i < 10000; i++) {
            es.submit(new LongAdderTest());
        }
        es.shutdown();
        //保证任务全部执行完
        while (!es.isTerminated()) {
        }
        long end = System.currentTimeMillis();
        System.out.println("LongAdder add 耗时=" + (end - start));
        System.out.println("LongAdder add result=" + longAdder.sum());
    }

}

在高并发情况下,LongAdder(累加器)比AtomicLong原子操作效率更高,LongAdder累加器是java8新加入的,参考以下压测代码
https://blog.csdn.net/fanrenxiang/article/details/80623884

相关文章

  • longAdder.increment()比 atomicLon

    为什么需要AtomicInteger原子操作类? 对于Java中的运算操作,例如自增或自减,若没有进行额外的同步操...

  • JDK8中新增原子性操作类LongAdder

    LongAdder简单介绍 LongAdder类似于AtomicLong是原子性递增或者递减类,AtomicLon...

  • 比,比,比

    俗话说没有对比就没有伤害。人的许多不是许多不快乐都是因为人的对比而来的。比这比那,只要可以比,都比一比,不可以比的...

  • 比什么比……

    近日,见到朋友的爷爷,老人家讲述了自己亲身经历的一件事。 有一天,老人赶着一辆毛驴车,行走在乡村的一条小路上。 驴...

  • 比什么比

    谁没有追求? 是因为手脚被束缚, 谁没有理想? 是因为环境所限制, 谁没有梦想? 是因为自然条件阻碍了你, 谁不想...

  • 比快,比慢,比巧

    关于信标对抗组的。控制器默认阈值是250,死区是1000ms,按这个值来,在一些距离比较近的灯上,车速一快,即使磁...

  • 比卦 — 水地比,比乐

    比,亲辅也。其卦坤下坎上。以卦象论,水在地上,最为亲切,比之象也。以爻论,五居尊位,众人比而从之,有一人辅万邦、四...

  • 她终于比、比、比死了

    慧从学生时代就是一个心高气傲的女孩,好胜心强,也不能看见别人比她好,她最强心里才舒坦。 可是命运却偏偏不眷顾慧,一...

  • 科比,科比!

    今天空间被科比刷屏,扫看了两眼,应该是今天NBA将科比曾穿过的“8号”“24号”两件球衣同时退役,空间里无数科蜜向...

  • 黑格比的比

    昨天早上一开始还是和风细雨,于是,按计划出行。 在街上的时候,就已经是狂风暴雨,乌云压顶,能见度不足白米。 打高速...

网友评论

      本文标题:longAdder.increment()比 atomicLon

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