`
raymond.chen
  • 浏览: 1418009 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

LongAdder和LongAccumulator的使用

 
阅读更多

LongAdder是jdk1.8提供的累加器,基于Striped64实现。它常用于状态采集、统计等场景。AtomicLong也可以用于这种场景,但在线程竞争激烈的情况下,LongAdder要比AtomicLong拥有更高的吞吐量,但会耗费更多的内存空间。

 

LongAccumulator和LongAdder类似,也基于Striped64实现。但要比LongAdder更加灵活(要传入一个函数式接口),LongAdder相当于是LongAccumulator的一种特例。

 

private static ExecutorService service;

//从初始值0开始,做加/减处理,每次加/减1
private static LongAdder adder = new LongAdder();

//从初始值0开始,做累加处理
private static LongAccumulator accumulator1 = new LongAccumulator((x, y) -> x+y, 0);

//从初始值1开始,做累积处理
private static LongAccumulator accumulator2 = new LongAccumulator((x, y) -> x*y, 1);

public static void main(String[] args) {
	service = Executors.newCachedThreadPool();
	
	for(int i=0; i<10; i++){
		service.submit(() -> {
			adder.increment(); //加1
//			adder.decrement(); //减1
			System.out.println(adder.intValue());
			
			accumulator1.accumulate(2); //每次加2
			System.out.println(accumulator1.get()); //获取当前值

			accumulator2.accumulate(2); //每次 * 2
			System.out.println(accumulator2.get()); //获取当前值
			
		});
	}
	
	service.shutdown();
}

 

 

分享到:
评论

相关推荐

    java多线程自增效率比较及原理解析

    在多线程环境下,对于自增操作需要考虑线程安全问题,常见的解决方法包括使用synchronized关键字、AtomicInteger、LongAdder和LongAccumulator等。本文给出了使用这些方法实现自增的代码演示,并通过多线程测试比较...

    Java17新特性详解含示例代码(值得珍藏)

    Java 17是Java的最新版本,带来了许多令人兴奋的新特性。...总的来说,Java 17的新特性使得Java更加健壮、易于使用和高效。这些新特性将帮助开发人员更好地构建应用程序,并提高其性能和可维护性。

    java8的DoubleAccumulator使用.docx

    看了一下资源都没有java8新特性DoubleAccumulator的使用例子,所以分享一下这个的使用另外的其他3个类工具的使用类似DoubleAdder,LongAccumulator,LongAdder

    Java并发工具类LongAdder原理实例解析

    主要介绍了Java并发工具类LongAdder原理实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下

    LongAdder源码解读

    通过对代码的流程分析,一步一步拆解,将源码解读变得简单

    Java高并发实战_java高并发_高并发_

    第6章介绍了 Java 8中为并行计算做的新的改进, 包括并行流、 CompletableFuture、 StampedLock和LongAdder。第7章主要介绍了高并发框架Akka的基本使用方法,并使用Ak:ka框架实现了 个简单的粒子群算法, 模拟超高...

    JDK8中新增的原子性操作类LongAdder详解

    主要给大家介绍了关于JDK8中新增的原子性操作类LongAdder的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面跟着小编来一起学习学习吧。

    java8看不到源码-allocation-tracker:用于查找过多对象分配的javaagent-主要存储库位于:

    java8 看不到源码对象分配跟踪器 目的和范围 此代理的目的是修复过多的对象分配问题。 虽然大多数分析器确实提供了分配跟踪,但当垃圾问题真...构建将使用LongAdder ,它在争用情况下具有更好的性能。 代理由PlatformMB

    concurrency:并发学习

    AtomicLong、LongAdder AtomicReference、AtomicReferenceFieldUpdater AtomicStampReference:CAS的ABA问题 原子性-synchronized 修饰代码块:大括号括起来的代码,作用于调用的对象 修饰方法:整个方法,作用于调用...

    Java 高并发十: JDK8对并发的新支持详解

    本文主要介绍Java 高并发JDK8的支持,这里整理了详细的资料及1. LongAdder 2. CompletableFuture 3. StampedLock的介绍,有兴趣的小伙伴可以参考下

    JavaStudy:Java原始语言学习:JDK,Spring,Mybatis等

    LongAdder第三周(2019/12 / 23-2019 / 12.29)同步器Java内存模型,易失性,同步,AQS,ReentrantLock,Semaphore,分布式锁第四周(2019/12 / 30-2020 / 01/05)并发集合CopyOnWriteArrayList,ConcurrentHashMap...

    jmh-samples:一些 JMH - Java Microbenchmark Harness Samples

    jmh-样本 一些 JMH - Java Microbenchmark Harness Samples 包含一些 JMH 示例代码。 地图推杆 比较 ConcurrentHashMap 与同步映射 ...比较 AtomicLong 与 LongAdder 随机基准 比较 Random 与 ThreadLocalRandom

    JDK-Concurrent:深入学习JDK Concurrent包,以及其他线程相关源码;

    AtomicLong在高并发下性能甚至还不如加锁,LongAdder比AtomicLong更适用于高并发下的累加TODO后续研究其原理 强引用,软引用,弱引用,幽灵引用,引用数量 强引用:StrongReference 例如Date date = new Date();...

Global site tag (gtag.js) - Google Analytics