前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >2020-10-22:谈谈java中的LongAdder和LongAccumulator的相同点和不同点。

2020-10-22:谈谈java中的LongAdder和LongAccumulator的相同点和不同点。

原创
作者头像
福大大架构师每日一题
修改2020-10-23 10:08:32
7910
修改2020-10-23 10:08:32
举报
文章被收录于专栏:福大大架构师每日一题

福哥答案2020-10-22:

简单回答:

相同点:都是多个单元操作。

不同点:LongAdder相加,LongAccumulator自定义计算规则。

中级回答:

相同点:

LongAddr与LongAccumulator类都是使用非阻塞算法CAS实现的,这相比于使用锁实现原子性操作在性能上有很大的提高。

LongAddr类是LongAccumulator类的一个特例,只是LongAccumulator提供了更强大的功能,可以让用户自定义累加规则。

不同点:

1.LongAccumulator相比于LongAddr不同之处在于调用casBase时,LongAccumulator使用 r = function.applyAsLong(b = base, x)来计算,LongAddr使用casBase(b = base, b + x)来计算。

2.通过LongAccumulator和LongAddr的longAccumulate()方法可知:当fn为null时就使用v+x加法运算,这时候就等价于LongAddr,当fn不为null时,则使用传递的fn函数计算。

3.LongAccumulator类相比于LongAddr功能更加强大,如上代码accumulatorFunction是一个双目运算器接口,其根据输入的两个参数返回一个计算值,identity则是LongAccumulator累加器的初始值。

4.LongAccumulator相比于LongAdder,可以为累加器提供非0的初始值,而LongAdder只能提供默认的0值。

5.另外,LongAccumulator还可以指定累加规则,比如累加或者相乘,只需要在构造LongAccumulator时,传入自定义的双目运算器即可,后者则内置累加规则。


评论

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档