JDK 8中的LondAddr 与synchronized和AtomicLong并发性能对比实验

目录

 

前文

正文

0. 测试环境

1. Synchronized 测试

2. AtomicLong测试

3. LongAdder测试

总结


前文

       多线程之间常见同步方式 :Synchronized / Lock / volitial + CAS 等,在不同的并发量和不同并发场景下性能不尽相同,尤其是Synchronized在不断经过优化之后性能得到了提升,而且无锁化CAS编程也成为了一些框架提升性能的手段,在JDK 8中,处理已有的原子类之外,添加了LongAdder和LongAccumulator原子类,除去应用场景不说,性能要比原始的原子类性能要好。

      LongAdder的实现原理是将原本的value,切分成了多个数组,每个线程单独操作数组中自己对应的值,在获取LongAdder的结果的时候,需要对数组中所有的值进行求和sum操作,LongAccumulator是LongAdder的功能增强版本,原理类似。

   

 

正文

      以下分别对Synchronized、AtomicLong和LongAdder在多线程下的性能进行简单测试。

0. 测试环境

     测试环境就不详细给出了,个人mac pro电脑,编译器:idea ,jdk 8……

1. Synchronized 测试

所需代码:
 

private static final int MAX_THREADS = 3;				   //线程数
private static final int TARGET_COUNT = 10000000;		   //目标总数


//用于统计完成子线程数目
static CountDownLatch cdlsync = new CountDownLatch(MAX_THREADS);


//所需要同步的变量
private long count = 0;


//同步的方法
protected synchronized long getCount(){
        return count;
}
protected synchronized long inc(){
    //如果不在这里进行越界判断,会出现超出TARGET_COUNT的情况
    if(co
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值