Java8新特性系列(原子性操作)

博客

github

java的原子性操作是不需要 synchronized 所谓的的原子性操作是不会被线程调度机制打断的操作,这种操作一旦开始,就一直运行到结束中间不会有任何context switch(切换到另一个线程)

AtomicLong

在单线程的环境中,使用long,如果对于多线程环境,如果使用long的话,需要加上synchronized关键字,从Jdk5开始,JDK提供了AtomicLong类,AtomicLong是一个提供原子操作的long类,通过线程安全的方式加减,AtomicLong提供了原子操作来进行long的使用因此十分适合高并发的情况下使用
AtomicLong使用非阻塞算法实现并发控制,在一些高并发程序中非常适合,但并不是每一种场景都适合,不同的场景要使用不同的数值类.

LongAdder

AtomicLong的原理是依靠底层的cas来保障原子性的更新数据,在添加或者减少的时候,会死循环不断的cas特定的值,从而达到更新数据的目的
那么LongAdder又是使用了什么原理?难道有比cas更加快速的方式
LongAdder在AtomicLong的基础上将单点的更新压力分散到各个节点上,在低并发的时候通过base的直接更新可以很好的保障和AtomicLong的性能基本保持一致,而在高并发的时候通过分散提高性能.

当计数的时候,将base和cell元素里面的值进行叠加,从而得到计算总数的目的,这里的问题.这里的问题是在计数的同时如果修改了cell元素,有可能导致计数的结果不准确.所以缺点是LongAdder在统计的时候如果有并发更新,可能导致统计的数据有误差. 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值